|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Modus ponens
|
Задачка из серии "для экзаменаторов"
Вот пришел к нам работать новый человек и поделился задачкой (я запостю пару моих решений, но позже). Вопрос который ему задали на каком-то собеседовании (он вообще сам пишет на Яве, поэтому во Флеше может показаться немного надумано, но в общем вопрос, можно сказать, агностически-программистсткий).
Собственно задача: Нужно развернуть однонаправленный связанный список за O(n) время, естесственно минимальным n. Во Флеше это конечно немного усложняется тем, что нет канонической реализации связного списка, но для задачи, предположим, что он у вас есть Если хочется предложить свои варианты реализации - я бы смотрел в сторону HaXe, т.как там есть стандартный List, ну или вы можете воспользоваться FD + моим шаблоном (как-бы нет в нем ничего особенного, и сейчас я начинаю понимать, что можно было бы по-другому... и ах... но для этой задачи не принципиально http://code.google.com/p/e4xu/source...es/List.as.fdt ).
__________________
Hell is the possibility of sanity |
|
|||||
А в чем подвох?
Обычным for 0..n создаем список.
__________________
Сам себе репортер |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
не? если нужен next сделаем список от n до 0
__________________
Отряд Котовскага Последний раз редактировалось Котяра; 13.07.2011 в 16:36. |
|
|||||
Modus ponens
|
Нет, я видимо не правильно объяснил. Список уже есть, готовый, его нужно развернуть, т.е. чтобы последний элемент списка стал первым, предпоследний - вторым и т.д.
Котяра: а проверка зачем?
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 13.07.2011 в 16:57. |
|
|||||
Регистрация: May 2003
Адрес: Tallinn
Сообщений: 3,181
|
Array#reverse() ?
|
|
|||||
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Хрен там, обычно просят накалякать код на бумажке без использования стандартных методов сортировки.
|
|
|||||
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
чото такое, что-ли
извините, как переменные назвать - не придумал просто %)
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. Последний раз редактировалось -De-; 13.07.2011 в 23:24. |
|
|||||
Modus ponens
|
Так-так-так, массивы тут не рассматриваются, и функцию нужно написать самому, а не взять готовую, в этом как бы и весь смысл (ну не знаю, представьте, что вы пишете на ассемблере, и готового ничего нет, даже libc).
Собственно, даже не обязательно написать на каком-то конкретном языке решение (можно просто на словах объяснить общий смысл), хотя, если оно внятно объясняет почему так, а не иначе, то, конечно, это тоже подходит. Еще, для тех, кто не в курсе - вычислить длину связного списка - это уже O(n) операция, где n - длина списка. Так что решение, в котором нужно "сначала найти последний элемент, или длину" потенциально неудачные, т.как это значит, что список нужно перебрать как минимум 2 раза. -De- - пока что ближе всех, но решение может быть меньшей алгоритмической сложности. Да, я забыл сказать, если вдруг это будет принципиально для решения - циркулярные списки не рассматриваются, но это конечно замечательно, если решение будет работать и для них тоже
__________________
Hell is the possibility of sanity |
|
|||||
Регистрация: Mar 2006
Адрес: Ростов-на-Дону
Сообщений: 80
|
Мой, "пазорный" вариант)
//создаём список var a:Object = {i:0}; var first:Object = a; for(var i:int = 1; i < 10; i++) { var next:Object = {i:i}; a.link = next; a = next; } first = reverse(first); //трейсим результат while (first.link) { trace(first.i); first = first.link; } trace(first.i); function reverse(first:Object, next:Object = null) { if(next == null) { next = first.link; first.link = null; } var successor:Object = next.link; next.link = first; if(successor) return reverse(next, successor); else return next; } |
Часовой пояс GMT +4, время: 06:59. |
|
« Предыдущая тема | Следующая тема » |
|
|