Andy Melnikov (nponeccop) wrote,
Andy Melnikov
nponeccop

Загадка на ночь этап 3

1. Как раньше, выбираем несколько полей из списка индексов Х, считаем кортежи и оставляем только кортежи, встречающиеся более Y раз. 2 <= Y <= 15. Встретится больше минимума раз очень мало комбинаций (единицы тысяч записей).
2. Делаем второй проход по файлу, собираем полные записи, составной ключ у которых совпадает с оставшимся в нашем списке.
3. Делаем пп. 1-2 несколько раз, для небольшого количества наборов полей Х. Разрешается читить и экономить проходы по файлам.

На входе список пар (Х, Y) и имя файла. Х не повторяются. На выходе мап мапов. На внешнем уровне мапа ключами являются Х, на внутреннем - составные ключи. Значения - полные строки файла по данным ключам в любом виде, из которого строки обратно можно восстановить.

Пп. 1-2 на псевдо-SQL. a, b - это поля из Х.

INSERT INTO tmp_foo SELECT a, b, count(*) AS c FROM csv GROUP BY a, b HAVING c > Y
SELECT * FROM csv JOIN tmp_foo ON a, b GROUP BY a, b

Референс-реализация 1-2, с захардкоженными Х и Y:

FileCommit, MBCPU, s
3.pl13056
Tags: fp, haskell, programming
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 17 comments