Отсортировать дерево?

User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Отсортировать дерево?

Post by Boriskin »

Строить надо trie, кое обычно как раз для такой херни (а также родов автодополнений самых популярных терминов типа как в гугле) и используется.
Тупизна как Энтропия. Неумолимо растет.
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

Немного оффтопика.
Посмотрел я про префиксное дерево - одна из областей где активно применяется - антивирусы.
Теперь понятно кому понадобилось такое ТЗ делать в Москве =).
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
OtherSide
Уже с Приветом
Posts: 15759
Joined: 01 Mar 2008 15:14

Re: Отсортировать дерево?

Post by OtherSide »

я честно говоря и не знал, как это назвается, решение по моему, очевидное. Компания не Касперский
User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Отсортировать дерево?

Post by Boriskin »

OtherSide wrote:я честно говоря и не знал, как это назвается, решение по моему, очевидное.
Ну придумывать это с ноля, да еще стоя у доски после пары часов предыдуших интервью - может быть нетривиально. А когда знаешь - то нормуль, хотя написать все чисто полюбасу займет какое-то время.
Тупизна как Энтропия. Неумолимо растет.
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

OtherSide wrote:я честно говоря и не знал, как это назвается, решение по моему, очевидное. Компания не Касперский
Вы про дерево или про кэширование?

Построение структуры хранящей слова можно было сделать и без дерева. Оно не сильно принципиально тут.
В вашем случае ключевым было именно кэширование результатов.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Отсортировать дерево?

Post by АццкоМото »

убей меня, не пойму, зачем кэшировать результаты если есть trie
Мат на форуме запрещен, блдж!
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

АццкоМото wrote:убей меня, не пойму, зачем кэшировать результаты если есть trie
Ну в этом trie список слов только в листьях содержится.
Если префикс короткий будет, например из одной буквы то придется собирать список слов из поддеревьев вместо того чтобы сразу извлечь список из кэша.
Мы при добавлении слова в префиксное дерево, добавляем слово и во все узлы ведущие к корню (в отдельный список слов).
Таким образом каждый узел хранит в себе кроме буквы также и список всех слов с текущим префиксом.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Отсортировать дерево?

Post by АццкоМото »

Pantigalt wrote:
АццкоМото wrote:убей меня, не пойму, зачем кэшировать результаты если есть trie
Ну в этом trie список слов только в листьях содержится.
Если префикс короткий будет, например из одной буквы то придется собирать список слов из поддеревьев вместо того чтобы сразу извлечь список из кэша.
Мне лень перечитывать задание, но по памяти - словарь до миллиона слов, а подсказки нужны после "нескольких" букв. Даже если взять префикс из одного символа, что-то около 100 тыщ должно быть максимум в ветке. траверс 100 тыс - это быстро.

Но КМК оптимум - сначала сделать depth first проход по всему дереву и для каждого нода хранить ссылки на 10 наиболее популярных слов. Т.е. _сначала_ проход по всему мульону, а потом все делается за константу. Траверс мульона за секунду - это 2800 тактов на нод у упомянутого 2.8 ГГц процессора. А у него еще и несколько ядер :) ИМХО если не у доски, то вполне можно. Хотя надо пробовать и смотреть - а лень

UPD. Дерево все равно создавать надо. Вот прямо во время создания и сделать эти ссылки, даже единственного прохода по готовому дереву не потребуется
Мат на форуме запрещен, блдж!
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Отсортировать дерево?

Post by АццкоМото »

Pantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
это фантастика
Мат на форуме запрещен, блдж!
User avatar
katit
Уже с Приветом
Posts: 23749
Joined: 05 Jul 2003 22:34
Location: Брест -> St. Louis, MO

Re: Отсортировать дерево?

Post by katit »

А за LINQ в 2 строчки двойку поставят? :lol:
Лучше водки — хуже нет! ©
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

АццкоМото wrote:
Pantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
это фантастика
Ну почему сразу фантастика.
Я думаю можно построить префиксное дерево так чтобы значения сортировались в нужном порядке при построении.
При поиске время будет затрачено только чтоб спуститься по префиксу в нужное место и извлечь первые 10 элементов из отсортированного списка.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

АццкоМото wrote:
Pantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
это фантастика
Я просмотрел вики и нашел описание Trie
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 Зощенко
User avatar
АццкоМото
Уже с Приветом
Posts: 15242
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Отсортировать дерево?

Post by АццкоМото »

Pantigalt wrote:
АццкоМото wrote:
Pantigalt wrote:По хорошему поиск окончаний для одного слово надо сделать почти за константное время (не зависящее от длины словаря).
это фантастика
Я просмотрел вики и нашел описание Trie
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.
Блин, ну да. Май бэд
Мат на форуме запрещен, блдж!
OtherSide
Уже с Приветом
Posts: 15759
Joined: 01 Mar 2008 15:14

Re: Отсортировать дерево?

Post by OtherSide »

Написали, что не прошел. Дескать префиксное дерево с кешированием - "решение в лоб"
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

OtherSide wrote:Написали, что не прошел. Дескать префиксное дерево с кешированием - "решение в лоб"
Формально вы удовлетворили их требования но они не нашли более лучшей формулировки для отказа.
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
User avatar
valchkou
Уже с Приветом
Posts: 4185
Joined: 27 Apr 2011 03:43
Location: Сергели ->Chicago

Re: Отсортировать дерево?

Post by valchkou »

могу предположить, что они хотели аналогию шардинга/map reduce:
разбить лист на маленькие деревья, затем параллельно запустить несколько потоков/workers.
User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Отсортировать дерево?

Post by Boriskin »

OtherSide wrote:Написали, что не прошел. Дескать префиксное дерево с кешированием - "решение в лоб"
Спроси "а как не в лоб", мало ли, может они что принципиально новое придумали.
Тупизна как Энтропия. Неумолимо растет.
OtherSide
Уже с Приветом
Posts: 15759
Joined: 01 Mar 2008 15:14

Re: Отсортировать дерево?

Post by OtherSide »

Да никто отвечать не будет. Вон и так две недели смотрели, ответили лишь когда дергать начал:

1. Решение в лоб
2. Код в кашу

Где там, мля каша, я выше постил
Pantigalt
Уже с Приветом
Posts: 802
Joined: 24 Jan 2007 07:32
Location: Сергели->Новосибирск->SFBA->Новосибирск->Москва->NY->SFBA

Re: Отсортировать дерево?

Post by Pantigalt »

OtherSide wrote:Да никто отвечать не будет. Вон и так две недели смотрели, ответили лишь когда дергать начал:

1. Решение в лоб
2. Код в кашу

Где там, мля каша, я выше постил
Это люкс так пишет?
Спи быстрее, твоя подушка нужна другому. Copyright Зощенко
OtherSide
Уже с Приветом
Posts: 15759
Joined: 01 Mar 2008 15:14

Re: Отсортировать дерево?

Post by OtherSide »

Некий "СПБ КОНТУР" ) В люксе был пару раз на собеседованиях, всегда по разному проходят
User avatar
Boriskin
Уже с Приветом
Posts: 18862
Joined: 30 Aug 2001 09:01
Location: 3rd planet

Re: Отсортировать дерево?

Post by Boriskin »

OtherSide wrote:Да никто отвечать не будет. Вон и так две недели смотрели, ответили лишь когда дергать начал:

1. Решение в лоб
2. Код в кашу

Где там, мля каша, я выше постил
Понятно, отмазка, да и та гнилая. Даже отказать культурно - и то не могут.
Тупизна как Энтропия. Неумолимо растет.
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Отсортировать дерево?

Post by tengiz »

Сдается мне, что они хотели более эффективную с точки зрения производительности структуру данных увидеть без необходимости что-то считать или сортировать при использовании - за счет более сложной пред обработки. Варианты такой структуры данных имеются. Хотя она нестандартная и получается немного заковыристой, для словарей реальных языков вполне уместится целиком в десятках - от силы паре сотен мегабайт памяти.

Хотя такую задачу давать в такой ситуации - даже Амазон такого не делает. Задачи попроще алгоритмически на самом деле даются для домашних заданий, обычно хочется посмотреть насколько "зрелый" код человек пишет, а не что он там может придумать или нагуглить за неделю.
Cheers
Berlaga
Уже с Приветом
Posts: 1008
Joined: 24 Mar 2010 21:14
Location: SFBA

Re: Отсортировать дерево?

Post by Berlaga »

tengiz wrote:Сдается мне, что они хотели более эффективную с точки зрения производительности структуру данных увидеть без необходимости что-то считать или сортировать при использовании - за счет более сложной пред обработки. Варианты такой структуры данных имеются. Хотя она нестандартная и получается немного заковыристой, для словарей реальных языков вполне уместится целиком в десятках - от силы паре сотен мегабайт памяти.

Хотя такую задачу давать в такой ситуации - даже Амазон такого не делает. Задачи попроще алгоритмически на самом деле даются для домашних заданий, обычно хочется посмотреть насколько "зрелый" код человек пишет, а не что он там может придумать или нагуглить за неделю.
Я там выше даввл решение, размер структуры в районе 10М, поиск константный.

И таки Амазон мне давал довольно таки закавыристые задачки в свое время, на очном интервью. Самое обидное, что завалился совсем не на них. :)
User avatar
tengiz
Уже с Приветом
Posts: 4468
Joined: 21 Sep 2000 09:01
Location: Sammamish, WA

Re: Отсортировать дерево?

Post by tengiz »

Berlaga wrote:И таки Амазон мне давал довольно таки закавыристые задачки в свое время, на очном интервью. Самое обидное, что завалился совсем не на них. :)
Очное другое дело, там можно много чего заполучить. А для домашнего задания - довольно гнусные (нудные, скучные и много-вариантные) для кодирования, но простые алгоритмически проблемы.
Cheers

Return to “Работа и Карьера в IT”