Отсортировать дерево?
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Отсортировать дерево?
Строить надо trie, кое обычно как раз для такой херни (а также родов автодополнений самых популярных терминов типа как в гугле) и используется.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
Немного оффтопика.
Посмотрел я про префиксное дерево - одна из областей где активно применяется - антивирусы.
Теперь понятно кому понадобилось такое ТЗ делать в Москве =).
Посмотрел я про префиксное дерево - одна из областей где активно применяется - антивирусы.
Теперь понятно кому понадобилось такое ТЗ делать в Москве =).
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Отсортировать дерево?
я честно говоря и не знал, как это назвается, решение по моему, очевидное. Компания не Касперский
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Отсортировать дерево?
Ну придумывать это с ноля, да еще стоя у доски после пары часов предыдуших интервью - может быть нетривиально. А когда знаешь - то нормуль, хотя написать все чисто полюбасу займет какое-то время.OtherSide wrote:я честно говоря и не знал, как это назвается, решение по моему, очевидное.
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
Вы про дерево или про кэширование?OtherSide wrote:я честно говоря и не знал, как это назвается, решение по моему, очевидное. Компания не Касперский
Построение структуры хранящей слова можно было сделать и без дерева. Оно не сильно принципиально тут.
В вашем случае ключевым было именно кэширование результатов.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: Отсортировать дерево?
убей меня, не пойму, зачем кэшировать результаты если есть trie
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
Ну в этом trie список слов только в листьях содержится.АццкоМото wrote:убей меня, не пойму, зачем кэшировать результаты если есть trie
Если префикс короткий будет, например из одной буквы то придется собирать список слов из поддеревьев вместо того чтобы сразу извлечь список из кэша.
Мы при добавлении слова в префиксное дерево, добавляем слово и во все узлы ведущие к корню (в отдельный список слов).
Таким образом каждый узел хранит в себе кроме буквы также и список всех слов с текущим префиксом.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: Отсортировать дерево?
Мне лень перечитывать задание, но по памяти - словарь до миллиона слов, а подсказки нужны после "нескольких" букв. Даже если взять префикс из одного символа, что-то около 100 тыщ должно быть максимум в ветке. траверс 100 тыс - это быстро.Pantigalt wrote:Ну в этом trie список слов только в листьях содержится.АццкоМото wrote:убей меня, не пойму, зачем кэшировать результаты если есть trie
Если префикс короткий будет, например из одной буквы то придется собирать список слов из поддеревьев вместо того чтобы сразу извлечь список из кэша.
Но КМК оптимум - сначала сделать depth first проход по всему дереву и для каждого нода хранить ссылки на 10 наиболее популярных слов. Т.е. _сначала_ проход по всему мульону, а потом все делается за константу. Траверс мульона за секунду - это 2800 тактов на нод у упомянутого 2.8 ГГц процессора. А у него еще и несколько ядер ИМХО если не у доски, то вполне можно. Хотя надо пробовать и смотреть - а лень
UPD. Дерево все равно создавать надо. Вот прямо во время создания и сделать эти ссылки, даже единственного прохода по готовому дереву не потребуется
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: Отсортировать дерево?
это фантастикаPantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 23749
- Joined: 05 Jul 2003 22:34
- Location: Брест -> St. Louis, MO
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
Ну почему сразу фантастика.АццкоМото wrote:это фантастикаPantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
Я думаю можно построить префиксное дерево так чтобы значения сортировались в нужном порядке при построении.
При поиске время будет затрачено только чтоб спуститься по префиксу в нужное место и извлечь первые 10 элементов из отсортированного списка.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
Я просмотрел вики и нашел описание TrieАццкоМото wrote:это фантастикаPantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
Looking up data in a trie is faster in the worst case, O(m) time (where m is the length of a search string), compared to an imperfect hash table. An imperfect hash table can have key collisions. A key collision is the hash function mapping of different keys to the same position in a hash table. The worst-case lookup speed in an imperfect hash table is O(N) time, but far more typically is O(1), with O(m) time spent evaluating the hash.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: Отсортировать дерево?
Блин, ну да. Май бэдPantigalt wrote:Я просмотрел вики и нашел описание TrieАццкоМото wrote:это фантастикаPantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).Looking up data in a trie is faster in the worst case, O(m) time (where m is the length of a search string), compared to an imperfect hash table. An imperfect hash table can have key collisions. A key collision is the hash function mapping of different keys to the same position in a hash table. The worst-case lookup speed in an imperfect hash table is O(N) time, but far more typically is O(1), with O(m) time spent evaluating the hash.
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Отсортировать дерево?
Написали, что не прошел. Дескать префиксное дерево с кешированием - "решение в лоб"
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
Формально вы удовлетворили их требования но они не нашли более лучшей формулировки для отказа.OtherSide wrote:Написали, что не прошел. Дескать префиксное дерево с кешированием - "решение в лоб"
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 4185
- Joined: 27 Apr 2011 03:43
- Location: Сергели ->Chicago
Re: Отсортировать дерево?
могу предположить, что они хотели аналогию шардинга/map reduce:
разбить лист на маленькие деревья, затем параллельно запустить несколько потоков/workers.
разбить лист на маленькие деревья, затем параллельно запустить несколько потоков/workers.
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Отсортировать дерево?
Спроси "а как не в лоб", мало ли, может они что принципиально новое придумали.OtherSide wrote:Написали, что не прошел. Дескать префиксное дерево с кешированием - "решение в лоб"
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Отсортировать дерево?
Да никто отвечать не будет. Вон и так две недели смотрели, ответили лишь когда дергать начал:
1. Решение в лоб
2. Код в кашу
Где там, мля каша, я выше постил
1. Решение в лоб
2. Код в кашу
Где там, мля каша, я выше постил
-
- Уже с Приветом
- Posts: 802
- Joined: 24 Jan 2007 07:32
- Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA
Re: Отсортировать дерево?
Это люкс так пишет?OtherSide wrote:Да никто отвечать не будет. Вон и так две недели смотрели, ответили лишь когда дергать начал:
1. Решение в лоб
2. Код в кашу
Где там, мля каша, я выше постил
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
-
- Уже с Приветом
- Posts: 15759
- Joined: 01 Mar 2008 15:14
Re: Отсортировать дерево?
Некий "СПБ КОНТУР" ) В люксе был пару раз на собеседованиях, всегда по разному проходят
-
- Уже с Приветом
- Posts: 18862
- Joined: 30 Aug 2001 09:01
- Location: 3rd planet
Re: Отсортировать дерево?
Понятно, отмазка, да и та гнилая. Даже отказать культурно - и то не могут.OtherSide wrote:Да никто отвечать не будет. Вон и так две недели смотрели, ответили лишь когда дергать начал:
1. Решение в лоб
2. Код в кашу
Где там, мля каша, я выше постил
Тупизна как Энтропия. Неумолимо растет.
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
Re: Отсортировать дерево?
Сдается мне, что они хотели более эффективную с точки зрения производительности структуру данных увидеть без необходимости что-то считать или сортировать при использовании - за счет более сложной пред обработки. Варианты такой структуры данных имеются. Хотя она нестандартная и получается немного заковыристой, для словарей реальных языков вполне уместится целиком в десятках - от силы паре сотен мегабайт памяти.
Хотя такую задачу давать в такой ситуации - даже Амазон такого не делает. Задачи попроще алгоритмически на самом деле даются для домашних заданий, обычно хочется посмотреть насколько "зрелый" код человек пишет, а не что он там может придумать или нагуглить за неделю.
Хотя такую задачу давать в такой ситуации - даже Амазон такого не делает. Задачи попроще алгоритмически на самом деле даются для домашних заданий, обычно хочется посмотреть насколько "зрелый" код человек пишет, а не что он там может придумать или нагуглить за неделю.
Cheers
-
- Уже с Приветом
- Posts: 1008
- Joined: 24 Mar 2010 21:14
- Location: SFBA
Re: Отсортировать дерево?
Я там выше даввл решение, размер структуры в районе 10М, поиск константный.tengiz wrote:Сдается мне, что они хотели более эффективную с точки зрения производительности структуру данных увидеть без необходимости что-то считать или сортировать при использовании - за счет более сложной пред обработки. Варианты такой структуры данных имеются. Хотя она нестандартная и получается немного заковыристой, для словарей реальных языков вполне уместится целиком в десятках - от силы паре сотен мегабайт памяти.
Хотя такую задачу давать в такой ситуации - даже Амазон такого не делает. Задачи попроще алгоритмически на самом деле даются для домашних заданий, обычно хочется посмотреть насколько "зрелый" код человек пишет, а не что он там может придумать или нагуглить за неделю.
И таки Амазон мне давал довольно таки закавыристые задачки в свое время, на очном интервью. Самое обидное, что завалился совсем не на них.
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
Re: Отсортировать дерево?
Очное другое дело, там можно много чего заполучить. А для домашнего задания - довольно гнусные (нудные, скучные и много-вариантные) для кодирования, но простые алгоритмически проблемы.Berlaga wrote:И таки Амазон мне давал довольно таки закавыристые задачки в свое время, на очном интервью. Самое обидное, что завалился совсем не на них.
Cheers