Главная страница


ru.algorithms

 
 - RU.ALGORITHMS ----------------------------------------------------------------
 From : Rustam Gadeyev                       2:5008/14      27 Oct 2001  12:07:44
 To : Evgeny Sharandin
 Subject : 8 мирных ферзей
 -------------------------------------------------------------------------------- 
 
 
 27 Окт 01 00:15, Evgeny Sharandin wrote Rustam Gadeyev:
 
  RG>> У рекурсии принципиально есть накладные расходы на стек, хотя бы
  RG>> на адрес возврата. Так что в общем случае рекурсия тормознее.
  ES> Hе всегда рекурсивный алгоритм может быть так безболезненно заменен на
  ES> цикл, как это было в рассматриваемом случае. Может потребоваться
  ES> сохранять результаты предыдущих итераций, для чего придется самому
  ES> лепить некий аналог стека. И здесь аппаратный стек может оказаться
  ES> гораздо быстрее.
 
 Согласен, теоретически могут быть и такие случаи, хотя до сих пор они мне в
 явном виде не попадались.
 
  ES> впрочем, тоже). Hо есть более принципиальные моменты. В твоем случае
  ES> внутри цикла сидит два последовательных цикла, в моем - один с
  ES> небольшим хвостиком (c рестартом на
  ES> внешний цикл, а не на последующий). Это не дает никаких альтернатив
  ES> оптимизатору при распределении переменных по регистрам (gpc умудрился
  ES> распихать по регистрам не только переменные, но и адреса массивов).
  ES> Кроме того, модификация переменных максимально приближена к проверкам
  ES> их значений. Hапример, dec(x); if x=0... Это позволяет компилятору
  ES> слить два оператора (декремента и сравнения с нулем) в один.
 
 Hу это-то не новость, когда два года ежедневно просматриваешь листинг программы,
 как он там был выражен в виде ассемблера микроконтроллера и при этом есть
 сильное ограничение по объему кода, плюс в отдельных местах нужно уложиться по
 быстродействию, то быстро вникаешь во все тонкости типа цикла
 i=100; do { } while (--i); который наиболее оптимален в ассемблере.
 Да, я в своем последнем варианте именно так и сделал. Привел все смещения к 0,
 основной перебор теперь идет с минимальными потерями без захода в цикл. Hо с
 переходами BC3 сильно напортачил. JMP, JNx друг на друга целый блок, это я не
 хотел применять прямой goto в нужное место, а фиктивный do { } while (0); с
 continue по условию внутри неадекватно воспринимается BC. Это IAR меня
 расслабил, у него таких ляпов нет.
 
  ES> Если планируется защищенный режим, то наличие единицы не
  ES> принципиально. Что есть она, что нет - все равно одна инструкция
  ES> процессора. Убирать ее имеет смысл только при использовании тупого
  ES> компилятора под RM или PM с 16-тибитными регистрами. BP или BC,
  ES> например ;)))
 
 Hе, постоянное смещение должно быть бесплатным независимо от режима. А вот если 
 все элементы сделать размером с DWORD, то 32-битный режим адресации будет весьма
 к месту.
  По крайней мере, совершенно неоптимизированный вариант удалось за счет
 оптимизации ускорить в несколько раз. Hо алгоритм при этом принципиально не
 поменялся, а именно это я и хотел узнать в первом письме. А то я уже видел тут
 недавно исходник на С про 8 ферзей, где автор, не долго думая, реализовал
 очевидный алгоритм, который должен просто смертельно тормозить на больших
 размерах доски. Видимо такие алгоритмические задания студентам не изменялись со 
 времен IBM PC/XT 4.77MHz, который загружался с дискеты объемом 160Kb, - не у
 всех были винты с невероятным объемом 5-10Mb.
 
 Good Bye.
 
 --- ---
  * Origin: Ulan-Ude. Buryatia. (2:5008/14)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 8 мирных ферзей   Rustam Gadeyev   11 Oct 2001 22:36:29 
 8 мирных ферзей   Max Alekseyev   11 Oct 2001 11:52:52 
 8 мирных ферзей   Evgeny Sharandin   18 Oct 2001 12:17:00 
 8 мирных ферзей   Rustam Gadeyev   19 Oct 2001 18:12:36 
 8 мирных ферзей   Evgeny Sharandin   23 Oct 2001 14:39:00 
 8 мирных ферзей   Rustam Gadeyev   24 Oct 2001 20:17:36 
 8 мирных ферзей   Evgeny Sharandin   27 Oct 2001 00:15:00 
 8 мирных ферзей   Rustam Gadeyev   27 Oct 2001 12:07:44 
 8 мирных ферзей   Rustam Gadeyev   19 Oct 2001 18:39:36 
 8 мирных ферзей   Evgeny Sharandin   23 Oct 2001 14:26:00 
Архивное /ru.algorithms/191323bdaacfa.html, оценка 3 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional