ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #11  
Старый 18.10.2009, 21:40
c0n Difesa
Участник форума
Регистрация: 01.01.2009
Сообщений: 144
Провел на форуме:
89680

Репутация: 154
По умолчанию

Цитата:
Сообщение от desTiny  
>>книга насыщена математическими выкладками
А что же такое "анализ алгоритмов" без математики?

и не надо аппелировать к термину "класс задач" - у него немного другой смысл.
Согласен, выполнять анализ без математических методов трудно. Но здесь это не требуется - достаточно написать конечные результаты и сделать по ним выводы.

Прошу Вас дать свой вариант определения "класса задач", чтобы заполнить пробел.

Последний раз редактировалось c0n Difesa; 18.10.2009 в 22:42..
 
Ответить с цитированием

  #12  
Старый 18.10.2009, 22:35
BrainDeaD
Постоянный
Регистрация: 09.06.2005
Сообщений: 531
Провел на форуме:
3516666

Репутация: 439


По умолчанию

Цитата:
Сообщение от c0n Difesa  
"Аппелировать" - всмысле использовать?
Аппелировать = обращаться))
 
Ответить с цитированием

  #13  
Старый 18.10.2009, 23:07
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

под классом задач обычно понимают http://ru.wikipedia.org/wiki/Класс_сложности


>>достаточно написать конечные результаты и сделать по ним выводы.
так напиши полезные результаты (а не пузырёк), и полные выводы. Например, сколько в среднем (по всем входным массивам) работает тот же пузырёк, и сколько обменов он совершает в среднем?
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием

  #14  
Старый 18.10.2009, 23:19
c0n Difesa
Участник форума
Регистрация: 01.01.2009
Сообщений: 144
Провел на форуме:
89680

Репутация: 154
По умолчанию

Цитата:
Сообщение от desTiny  
под классом задач обычно понимают http://ru.wikipedia.org/wiki/Класс_сложности


>>достаточно написать конечные результаты и сделать по ним выводы.
так напиши полезные результаты (а не пузырёк), и полные выводы. Например, сколько в среднем (по всем входным массивам) работает тот же пузырёк, и сколько обменов он совершает в среднем?
Из Википедии:
Цитата:
В теории алгоритмов классами сложности называются множества вычислительных задач, примерно одинаковых по сложности вычисления.
Чтобы не быть голословным, объясните, где в своих постах я использовал данный термин не "по назначению".

Я понимаю что метрика "среднего случая" для Вас крайне важна, но не настолько, чтобы она стояла по приоритетам выше "худший случай" и "лучший случай", которых вполне достаточно для сравнения алгоритмов по эффективности.
 
Ответить с цитированием

  #15  
Старый 18.10.2009, 23:54
desTiny
Reservists Of Antichat - Level 6
Регистрация: 04.02.2007
Сообщений: 1,152
Провел на форуме:
3008839

Репутация: 1502


По умолчанию

>>где в своих постах я использовал данный термин не "по назначению".

Цитата:
Существует множество способов решения определенной задачи (класса задач). Это множество порождает обилие алгоритмов, которые ее решают. Однако из этого набора алгоритмов можно выбрать те, которые справляются с поставленной задачей (классом задач) быстрее остальных, используя меньше ресурсов процессора и /или оперативной памяти.

Цель данного топика: рассмотреть как можно больше алгоритмов, оценить их временную сложность и определить границы эффективного применения. Границы эффективного применения – класс задач, для которого рассматриваемый алгоритм будет наиболее быстродейственным.
Один алгоритм (или "способ решения") к классу задач нельзя применить. Класс задач лишь говорит, что например, заача решается за полиномиальное время. Но если за полиномиальное время можно и посадить картошку, и собрать яблоки - это не значит, что это делается одним и тем же способом.

тут под классом задач, как я понимаю, имеется в виду "похожие по смыслу задачи". А, например, для похожих по смыслу задач проверки числа на простоту (невероятностного) и разложения на множители, первая имеет быстрое решение (логарифм числа в какой-то степени), а про вторую существование быстрого решения неизвестно.

>>которых вполне достаточно для сравнения алгоритмов по эффективности.
недостаточно. Вот почему, по-вашему, так часто пишут qsort, хотя худший случай это N^2, а не merge - с N log N ? А потому что, очень часто (читай - на случайном входе) быстродействие первого оказывается не хуже второго, а часто - лучше.
__________________
Bedankt euch dafür bei euch selbst.

H_2(S^3/((z1, z2)~(exp(2pi*i/p)z1, exp(2pi*q*i/p)z2)))=Z/pZ
 
Ответить с цитированием

  #16  
Старый 19.10.2009, 14:08
Nikituki
Новичок
Регистрация: 14.03.2009
Сообщений: 25
Провел на форуме:
72034

Репутация: 5
Отправить сообщение для Nikituki с помощью ICQ
По умолчанию

Цитата:
Сообщение от desTiny  
недостаточно. Вот почему, по-вашему, так часто пишут qsort, хотя худший случай это N^2, а не merge - с N log N ? А потому что, очень часто (читай - на случайном входе) быстродействие первого оказывается не хуже второго, а часто - лучше.
Для алгоритмов, уже описанных в этом топике, оценка среднего случая не так важна, тк в каждом из них она ближе к худшему случаю.
А о сортировках из вашего примера (быстрой и слиянием) автор еще не упоминал, и я уверен, что когда он это сделает, то мы увидим оценку их временной сложности в среднем случае
 
Ответить с цитированием

  #17  
Старый 19.10.2009, 14:34
ErrorNeo
Moderator - Level 7
Регистрация: 02.05.2009
Сообщений: 894
Провел на форуме:
4297091

Репутация: 2261


Отправить сообщение для ErrorNeo с помощью ICQ
По умолчанию

Кнута не читал и пока не собираюсь.
Эта статья интерсна, и чем больше в ней ставрительных характеристик тем лучше.
Если будут выкладки из чего-либо кроме википедии - будет вообще perfect
 
Ответить с цитированием

  #18  
Старый 19.10.2009, 14:47
c0n Difesa
Участник форума
Регистрация: 01.01.2009
Сообщений: 144
Провел на форуме:
89680

Репутация: 154
По умолчанию

Цитата:
Сообщение от desTiny  
тут под классом задач, как я понимаю, имеется в виду "похожие по смыслу задачи"
Под классом задач тут понимается именно похожие по сложности задачи. Например схожие по размеру и степени упорядоченности массивы.

Цитата:
недостаточно. Вот почему, по-вашему, так часто пишут qsort, хотя худший случай это N^2, а не merge - с N log N ?
Приведенные Вами алгоритмы сортировок я еще не успел рассмотреть. Повторюсь еще раз (и как заметил, Nikituki): в уже рассмотренных алгоритмах средний случай эквивалентен худшему. Ваше замечание я учту в дальнейших обзорах и средний случай буду рассматривать отдельно.
Цитата:
Сообщение от ErrorNeo  
Кнута не читал и пока не собираюсь.
Эта статья интерсна, и чем больше в ней ставрительных характеристик тем лучше.
Если будут выкладки из чего-либо кроме википедии - будет вообще perfect
Будет еще замечательней, если другие также будут выкладывать свои алгоритмы (не только базовые, коих хватает в Википедии) с их обзорами.
 
Ответить с цитированием

Циклический сдвиг элементов массива вправо на k позиций
  #19  
Старый 19.10.2009, 15:21
Nikituki
Новичок
Регистрация: 14.03.2009
Сообщений: 25
Провел на форуме:
72034

Репутация: 5
Отправить сообщение для Nikituki с помощью ICQ
По умолчанию Циклический сдвиг элементов массива вправо на k позиций

Цитата:
Сообщение от c0n Difesa  
Будет еще замечательней, если другие также будут выкладывать свои алгоритмы (не только базовые, коих хватает в Википедии) с их обзорами.
Ну чтож, попробую, мб кому-нибудь пригодится=)

Циклический сдвиг элементов массива вправо на k позиций

1) Код:
Код:
template <typename MassiveType>
void Shift(MassiveType *Massive, int MassiveLen, int k)
{ 	
        Reverse(Massive,0,MassiveLen-1); //разворачиваем массив   
        Reverse(Massive,0,k-1);  //разворачиваем первые к элементов
	Reverse(Massive,k,MassiveLen-1); //разворачиваем последние n-k эллементов
}

template <typename MassiveType>
void Reverse(MassiveType *Massive, int StartElem, int FinishElem)
{ 	
        int i;
        MassiveType tresh; 	
        for (i=0;i<=(FinishElem-StartElem)/2;i++) 
        {
                  tresh=Massive[StartElem+i]; 	 
                  Massive[StartElem+i]=Massive[FinishElem-i]; 		       
                  Massive[FinishElem-i]=tresh; 	
        } 
}
2) Особенности:

Не используется выделение больших объемов дополнительной памяти.

3) Временная сложность:

Во всех случаях Т(n) = О(N)

Последний раз редактировалось Nikituki; 19.10.2009 в 15:33..
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ