Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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
1-1190366442
nali
2007-09-21 13:20
2007.12.09
Ошибка при динамическом создании компонента.


2-1194838802
d@nger
2007-11-12 06:40
2007.12.09
Jpeg и дата съемки


2-1195027023
F@T@L_Err0r
2007-11-14 10:57
2007.12.09
Запуск программы


15-1194562284
pavel
2007-11-09 01:51
2007.12.09
Списки очередей


1-1189163263
S@shka
2007-09-07 15:07
2007.12.09
Старт программы из Сервиса