Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.55 MB
Время: 0.016 c
15-1194939406
TYuD
2007-11-13 10:36
2007.12.09
Не всегда получается отладка dll.


15-1194605822
boriskb
2007-11-09 13:57
2007.12.09
Это что? Сайт вроде солидный


1-1190308769
wipr
2007-09-20 21:19
2007.12.09
Подскажите где можно взять BDE_ENT.Msm


2-1195214661
allucard
2007-11-16 15:04
2007.12.09
Delphi + firebird


2-1194928312
San1712
2007-11-13 07:31
2007.12.09
При копировании в Clipboard русских символов изменяется их код-ка




   Наверх