Зашел сегодня на блог одного знакомого. И тогда и сейчас у него было обьявление о наборе программистов в его фирму, писать на PHP. В качестве “пробы” предлагалось, да и предлагается, решить такую задачу:
Есть текстовый файл, в котором находится описание дерева в следующем виде:
node_id|parent_id|node_nameparent_id - id родителя, если оно равно 0 - это корневой узел.
Задача: отобразить этот файл в виде дерева, с отступами для каждого уровня табуляциями (первый уровень - ноль табуляций, второй уровень - одна, и т.д.).
Файл-пример содержит:
1|0|Electronics 2|0|Video 3|0|Photo 4|1|MP3 player 5|1|TV 6|4|iPod 7|6|Shuffle 8|3|SLR 9|8|DSLR 10|9|Nikon 11|9|Canon 12|11|20DОтветом должно быть:
Electronics MP3 player iPod Shuffle TV Video Photo SLR DSLR Nikon Canon 20D
Тут еще заметки относительно решения есть.
Где-то полгода назад я пробовал ее решить. Решил. Очень по идиотскому, даже вспоминать не хочется. Сейчас вот зашел на блог и захотелось опять попробовать решить задачу… И вот сейчас хочется услышать/увидеть ваши решения. Интересует именно алгоритм, писать можете на любом языке (для C++-ников предлагаю вставить вместо разделителя “|” пробел, чтобы не парится с считыванием из файла).
PS. Моим новым решением я тоже поделюсь… Потом. ;)
PPS. JQuery 1.2 - объявлен новый пользовательский интерфейс для платформы Java - Да… Не перевелись еще идиоты на Руси…





September 15th, 2007 at 00:59
Использовать DOM функции, там с деревом работать просто :)
Или же использовать ассоциативные массивы. Это по сути описание того, как хранить это дерево удобнее для последующей обработки и выдачи результатов.
Или нужен алгоритм с минимумом строк кода?
September 15th, 2007 at 01:01
Нет. Нужен максимально оптимальный алгоритм. Хоть на псевдокоде. Сложность алгоритма, который получился у меня - O(n), n - кол-во узлов.
September 15th, 2007 at 01:16
вот на питоне. только разъехалось форматирование :)
работает с нелинейной нумерацией parent_id (то бишь, они могут быть 1,3,10 и всё)
September 15th, 2007 at 01:22
net sets только в текстовике походу..
September 15th, 2007 at 01:24
Ясень пень, что не оптимально, нет проверок на все ошибки и т.п. Но общий смысле же понятен :)
September 15th, 2007 at 01:28
Ахуенный код просто. Только неправильно работающий немного ;)
September 15th, 2007 at 01:33
По диагонали прочитал задание. Там еще надо учитывать кое-что. Ладно, допишем :)
September 15th, 2007 at 18:48
Делал нечто подобное для генерации дерева, правда все данные хранились в базе. В основе там была функция рекурсивная, работала по принципу “начать сверху, найти детей и сделать то же самое для детей”.
Есть задача поинтересней - отрисовка дерева только до тех веток, где название/содержание ветки (частично) совпадает с поисковым словом
September 16th, 2007 at 00:04
Тут суть в том - как быстро построить это самое дерево. Конкретных реализаций я пока что так и не увидел. :(
November 16th, 2007 at 01:41
Честно говоря малость удивлёт отсутствием решений. Вой мой вариант.
November 16th, 2007 at 02:56
Просто вот мое решение. :)