Текущий архив: 2007.12.09;
Скачать: CL | DM;
Вниз
Отрицательные стороны рекурсии. Найти похожие ветки
← →
clickmaker © (2007-11-08 12:54) [40]
> А если ты с самого начала не можешь сказать узкие места
> по производительности, то наверное лучше не браться за написание
> высокопроизводительного кода
да не... потом можно всегда заказчика запарить: "у вас винт тормозит или сетка" )
← →
Romkin © (2007-11-08 13:01) [41]Mystic © (08.11.07 12:48) [39] Это не оптимизация. Это плохое проектирование :)
← →
ferr (2007-11-08 13:05) [42]В функциональных языках рекурсия это всё.
Например по списку можно проходить используя рекурсию..
← →
Сусл © (2007-11-08 15:01) [43]
> 42] ferr (08.11.07 13:05)
> В функциональных языках рекурсия это всё.
> Например по списку можно проходить используя рекурсию..
зато они и тормозят неподецки :) надеюсь, что пока. насколько я знаю перспективы ускорения есть.
зато красота, конечно нереальная - одной-двумя строками написать быструю сортировку. я на дельфи пытался повторить - красиво выглядит надо сказать, только медленно :)
← →
Anatoly Podgoretsky © (2007-11-08 16:24) [44]> TUser (08.11.2007 12:11:34) [34]
Для Дельфимастеров очень актуально!
← →
Mystic © (2007-11-08 16:27) [45]> Это не оптимизация. Это плохое проектирование :)
Ну... Проектирования без учета требования скорости выполнения кода. Хотя даже в этом случае можно использовать, например, метод 0x88. Вообще это связные вещи, так что в данном случае я бы сказал, что при проектировании не учитывалось требование оптимальности (оставлено на потом). Что и привело к такому результату (код в мусорку)
> зато красота, конечно нереальная - одной-двумя строками
> написать быструю сортировку
Все-таки немного разные алгоритмы. Обычно из списке берется средний элемент, чтобы эффективно сортировались уже отсортированные списке. А в примерах на ФЯ часто выбирается первый элемент. С другой стороны, дайте мне хорошую библиотеку для работы со списками, я и на Delphi Напишу сортировку в две строки
function Sort(L: TIntList): TIntList;
begin
Element := L.GetMiddle();
Result := Concat([L.GetLess(Element), L.GetEqual(Element), L.GetMore(Element)]);
end;
← →
Mystic © (2007-11-08 16:30) [46]> TUser © (08.11.07 12:11) [34]
> Могу сказать, что рекурсивные алгоритмы на порядок сложнее
> в отладке.
Это не бесспорно. Зачастую рекурсивный алгоритм и отлаживать не надо, а на обычном надо городить стек, операции с ним и т. д.
← →
Mystic © (2007-11-08 16:33) [47]function Sort(L: TIntList): TIntList;
begin
if L.Size = 1 then Result := L else
begin
Element := L.GetMiddle();
Result := Concat([Sort(L.GetLess(Element)), L.GetEqual(Element), Sort(L.GetMore(Element))]);
end;
end;
← →
NX (2007-11-08 17:46) [48]
> Riply © (08.11.07 03:29)
Бесконечный цикл -> Переполнение памяти -> Смерть винды -> Рестарт
← →
KilkennyCat © (2007-11-08 18:09) [49]
> NX (08.11.07 17:46) [48]
бесконечный цикл не только рекурсия
переполнение памяти при бесконечном цикле не обязательно
смерть винды ваще маловероятно, если не говорить о 9х
а причем здесь рестарт?
← →
Сусл © (2007-11-08 18:44) [50]
> [47] Mystic © (08.11.07 16:33)
ну да, быстрая сортировка :)
← →
iZEN © (2007-11-08 22:40) [51]
> Romkin © (08.11.07 10:06) [33]
>
> Отказываются от рекурсии из-за желания оптимизировать.
> Я все время пользуюсь (пытаюсь) двумя правилами:
> 1. Не делайте оптимизацию.
> 2. Только для экспертов: не делайте оптимизацию раньше времени.
>
> (с) не помню кто.
> Но желание "ускорить", похоже, неистребимо :)
>
1. Программирование есть процесс автоматизации труда. Без компьютеров задача решалась бы вручную долго и непроизводительно. Так что сам процесс программирования является оптимизацией ручного труда.
2. Что касается не делать оптимизацию раньше времени, то да, нужно посмотреть, а стоит ли вообще программировать получение решения потенциально спорной задачи.
:))
← →
Mystic © (2007-11-09 11:11) [52]> ну да, быстрая сортировка :)
От нее осталось одно название :) На самом деле это тормознутая сортировка. Посчитай, какой количество временных объектов создастся? Плюс нужен хотя бы счетчик ссылок для того, чтобы умирали бесчисленные временные объекты ;)
← →
TUser © (2007-11-09 12:00) [53]Представим себе, что TIntList из [47] - потомок обычного TList, для которого определены всякие там GetMiddle и прочее. Я передаю в Sort экземпляр этого класса. GetLess, GetEqual и GetMore создают три новых экземпляра. Concat возвращает еще один экземпляр. А как иначе? И так на каждой итерации. А кто будет уничтожать созданный зверинец? Счетчика ссылок-то в Delphi не предусмотрено.
Страницы: 1 2 вся ветка
Текущий архив: 2007.12.09;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.023 c