![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 26.11.2016
Сообщений: 7
|
![]()
Может кто-нибудь на примере кода объяснить сортировку «демоном Максвелла», заранее благодарю.
Тут описана сортировка «демоном Максвелла»---->https://habrahabr.ru/post/161835/ |
![]() |
![]() |
![]() |
#2 |
Новичок
Джуниор
Регистрация: 05.12.2018
Сообщений: 1
|
![]()
http://algolab.valemak.com/maxwell-demon
здесь человек пишет что его сложность O(n! + [n/2]! + [n/4]! + [n/8]! + ... + 1!) то есть он вообще не думоит https://habr.com/post/161835/ также не ясно почему этот алгоритм оказался в этой шуточной статье между тем не существует ни одного поста в знакомом мне интернете, где его хоть как-то попытались реализовать (люди пишут что хотят, а эксперимент не проводят). да даже в лабораторке задание вон с 2мя ошибками(jpg файл) Я, должно быть поздновато вам отвечаю на вопрос, но вы просто знайте, что алгоритм неплох тем, что просто пишется и запоминается, не требователен к памяти (O(n)) и сложность по времени близка к O(n*log2n) Если хотите напишите другую шуточную статью на хабре о человеческой предвзятости и глупости. Только, ради бога, не указывайте меня соавтором. Даже если я первый в мире человек, выполнивший этот вариант лабораторки. Завтра пойду смотреть в круглые глаза препода. Потому что он, когда копипастил задачу, наверное тоже думал что это еще один богосорт. void DMaxwell(int *arr, int len) { if(len == 1) return; if(len == 2) { if(arr[0]>arr[1]) len=arr[0], arr[0]=arr[1], arr[1]=len; return; } int *dat = malloc(4*len), lb = 0, rb = len-1, lmax = arr[0], rmin = arr[len/2]; for(int i = 0; i < len/2; i++) if(arr[i] > lmax) lmax = arr[i]; for(int i = len/2; i < len; i++) if(arr[i] < rmin) rmin = arr[i]; while(rmin<lmax) { lb = 0, rb = len-1; for(int i = 0; i < len/2; i++) if(arr[i] <= rmin) dat[lb++] = arr[i]; else dat[rb--] = arr[i]; for(int i = len/2; i < len; i++) if(arr[i] > lmax) dat[rb--] = arr[i]; else dat[lb++] = arr[i]; for(int i = 0; i < len; i++) arr[i] = dat[i]; lmax = arr[0], rmin = arr[len/2]; for(int i = 0; i < len/2; i++) if(arr[i] > lmax) lmax = arr[i]; for(int i = len/2; i < len; i++) if(arr[i] < rmin) rmin = arr[i]; } free(dat); DMaxwell(arr, len/2); DMaxwell(arr+len/2, len/2+len%2); } |
![]() |
![]() |
![]() |
#3 | |
Новичок
Джуниор
Регистрация: 12.12.2018
Сообщений: 1
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,833
|
![]()
Не требует, а возвращает. Не почему-то, а потому что это "указатель на все". Сделайте приведение типов или раз уж пишите на С++ используйте new.
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уравнение Максвелла. | Smitt&Wesson | Свободное общение | 1 | 16.12.2013 22:16 |
Интеграл от функции распределения Максвелла | Virus1 | C# (си шарп) | 0 | 18.11.2012 20:05 |
Распределение Максвелла в TASM | Ispotiq | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 9 | 10.05.2010 16:40 |
Daemon или как заключить сделку с демоном | Dj_smart | PHP | 13 | 04.10.2008 00:07 |