Форум сайта python.su
Собственно, очень интересуют варианты подхода к решению.
1. Старая добрая игра “Балда”. Надо моментально определять, существует ли такое слово в словаре или нет.
2. Два файла-слепка файловой системы в разное время (допустим, a и b), каждый в plain text содержит список абсолютных путей до каждого файла. В беспорядке. Задача - найти файлы, которые удалились и которые добавились за это время. Файлы очень большие, ресурсов очень мало.
Я так понимаю, что оптимальным решением для первой задачи может быть Trie. То есть мы по мере набора букв обходим дерево и проверяем на успех. Вопрос в таком случае касается только хранения - в каком виде хранить эту префиксную структуру? Например, в MySQL?
Со второй не все так просто. Хотя, в принципе, Trie тоже подходит. Но, возможно, существует какое-то более эффективное решение… Хэширование тоже не очень подходит, ибо в память все равно не влезет.
Есть что-то похожее в блоге Гвидо: http://neopythonic.blogspot.com/2008/10/sorting-million-32-bit-integers-in-2mb.html , я только начал это дело разбирать.
В общем, кто что думает по данной теме?
Отредактировано (Фев. 23, 2011 00:24:12)
Офлайн
сколько фалов ориентировочно?
Офлайн
EnchantnerСудя по твоим многоточиям - решения давно уже есть. Меньше многоточий, чувак. Ты что, в гамаке лежишь ?
Собственно, очень интересуют варианты подхода к решению.
1. Старая добрая игра “Балда”. Надо моментально определять, существует ли такое слово в словаре или нет.
2. Два файла-слепка файловой системы в разное время (допустим, a и b), каждый в plain text содержит список абсолютных путей до каждого файла. В беспорядке. Задача - найти файлы, которые удалились и которые добавились за это время. Файлы очень большие, ресурсов очень мало.
Я так понимаю, что оптимальным решением для первой задачи может быть Trie. То есть мы по мере набора букв обходим дерево и проверяем на успех. Вопрос в таком случае касается только хранения - в каком виде хранить эту префиксную структуру? Например, в MySQL?
Со второй не все так просто. Хотя, в принципе, Trie тоже подходит. Но, возможно, существует какое-то более эффективное решение… Хэширование тоже не очень подходит, ибо в память все равно не влезет.
Есть что-то похожее в блоге Гвидо: http://neopythonic.blogspot.com/2008/10/sorting-million-32-bit-integers-in-2mb.html , я только начал это дело разбирать.
В общем, кто что думает по данной теме?
Офлайн
Стиль оформления твоего ответа, leechuck, мне кое кого напомнил… Только у того Аццкого чувака мата было меньше, хотя может он просто подрос?
А вообще, это твое третье сообщение на форуме, а ты уже пальцем тыкаешь в то, сколько многоточий использовать… Не хорошо…
EnchantnerЭтот словарь в set влезет? Если да, то всё просто.
1. Старая добрая игра “Балда”. Надо моментально определять, существует ли такое слово в словаре или нет.
EnchantnerПоищи по форуму: не так давно очень похожая задача обсуждалась. Притом довольно долго и, вроде, успешно.
2. Два файла-слепка файловой системы в разное время (допустим, a и b), каждый в plain text содержит список абсолютных путей до каждого файла. В беспорядке. Задача - найти файлы, которые удалились и которые добавились за это время. Файлы очень большие, ресурсов очень мало.
Офлайн
як говориця, ты чи пидрос :)
Офлайн
ZZZТам слов тысяч сто, я думаю, их в памяти хранить не вариант. А как заимплементить это дело в базе - вот это уже вопрос.
Этот словарь в set влезет? Если да, то всё просто.
Офлайн
Старая добрая балда, решается старой доброй дихотомией.
Файл с отсортированными словами, время поиска логарифмическое. Ты ничего не написал про вставку, нужна ли она? Если нет, то отсортированный файл хороший выбор. Правда, для того чтобы прыгать по строчкам, придется взять строку фиксированной длины…
Фишка с набором букв - не очень, потому что буквы можно набирать например так: “првет”, а потом вбить недостающую букву в нужное место “прИвет”.
Во втором случае есть два дерева, и надо их сравнить. Алгоритмы сравнения деревьев есть. Ну или можно заставить бд сравнить их через какой-нибудь джоин :)
ЗЫ В гугл взяли? Или готовишься? :)
Отредактировано (Фев. 23, 2011 12:52:41)
Офлайн
ZubchickНельзя, в балде выбор букв идет строго по порядку в слове :) А решать дихотомией - ты имеешь в виду просто двоичный поиск по отсортированному массиву слов? И как это сделать в базе?
Фишка с набором букв - не очень, потому что буквы можно набирать например так: “првет”, а потом вбить недостающую букву в нужное место “прИвет”.
ZubchickВ том-то и фишка, что не отсортированными, а если файлы большие - то сортировка займет очень долгое время…
Файл с отсортированными словами, время поиска логарифмическое. Ты ничего не написал про вставку, нужна ли она? Если нет, то отсортированный файл хороший выбор. Правда, для того чтобы прыгать по строчкам, придется взять строку фиксированной длины…
Офлайн