Size: a a a

Compiler Development

2020 May 18

p

polunin.ai in Compiler Development
Eugene
для того что бы получить минимальный элемент массива, не обязательно сортировать его полностью
Минимальный элемент в массиве находится простым перебором за O(n) время как бы. При чем тут сортировка...
источник

E

Eugene in Compiler Development
polunin.ai
Минимальный элемент в массиве находится простым перебором за O(n) время как бы. При чем тут сортировка...
ну вот такой прикол у хаскеллистов — поиск минимального элемента массива путём его сортировки и взятия первого элемента
источник

E

Eugene in Compiler Development
а, ну и да, тут скорее всё же не сортировка массива, а сортировка списков, с массивами может быть сложнее
источник

λ

λoλdog in Compiler Development
polunin.ai
Давно доказано что сортировка массива не может иметь время меньше чем O(n*logn)
Бабл сорт может за O(n) ))))))
источник

p

polunin.ai in Compiler Development
Eugene
ну вот такой прикол у хаскеллистов — поиск минимального элемента массива путём его сортировки и взятия первого элемента
Тогда время будет минимум O(n*logn) если честно сортировать а потом брать. Но мне кажется вы неправильно что-то увидели.
источник

E

Eugene in Compiler Development
polunin.ai
Тогда время будет минимум O(n*logn) если честно сортировать а потом брать. Но мне кажется вы неправильно что-то увидели.
речь о ленивом языке, там нет нужды делать всю работу, если используется только часть результата
источник

M

MaxGraey in Compiler Development
MaxGraey
Вот кстати реализация:
https://hackage.haskell.org/package/containers-0.6.2.1/docs/src/Data.Sequence.Internal.Sorting.html#sortBy

Там используется popMinIQ (Pop the smallest element from the queue, using the supplied comparator). И там похоже не merge sort а что то вроде merge K sorted queues via min-heap. Но я не хаскелист и поэтому трудно спределить в точности
И кстати в том же C++ это можно добиться через std::partial_sort
источник

p

polunin.ai in Compiler Development
Eugene
речь о ленивом языке, там нет нужды делать всю работу, если используется только часть результата
Нихрена не понял, но очень интересно. Повторяю.
Если честно сортировать, потом брать первый элемент то время будет минимум O(n*logn).
источник

p

polunin.ai in Compiler Development
Покажите лучше откуда вы нашли эту фишку с сортировкой и взятием первого элемента.
источник

E

Eugene in Compiler Development
polunin.ai
Нихрена не понял, но очень интересно. Повторяю.
Если честно сортировать, потом брать первый элемент то время будет минимум O(n*logn).
вы рассуждаете императивно
источник

M

MaxGraey in Compiler Development
polunin.ai
Нихрена не понял, но очень интересно. Повторяю.
Если честно сортировать, потом брать первый элемент то время будет минимум O(n*logn).
В ленивом языке это возможно, так как все выполнение отложено, вопрос в том что там внутри если для начала нужно разобрать весь массив как в случае с merge sort а потом собрать заново, то O(N) не получиться для случая head(sort(list))
источник

p

polunin.ai in Compiler Development
MaxGraey
В ленивом языке это возможно, так как все выполнение отложено, вопрос в том что там внутри если для начала нужно разобрать весь массив как в случае с merge sort а потом собрать заново, то O(N) не получиться для случая head(sort(list))
Я же написал, если там честно сортируется, то никак меньше O(n*logn) не выйдет
источник

M

MaxGraey in Compiler Development
А вот то, как реализовано в Хаскеле (сортировка через minHeap со слиянием) это похоже возможно. Так жде советую взклянуть на std::partial_sort
источник

E

Eugene in Compiler Development
polunin.ai
Покажите лучше откуда вы нашли эту фишку с сортировкой и взятием первого элемента.
https://thesz.livejournal.com/958777.html?thread=7607353#t7607353

там Зефиров ответил:

> Было take n . sort, стало head . sort

ну типа так получилось...
источник

M

MaxGraey in Compiler Development
polunin.ai
Я же написал, если там честно сортируется, то никак меньше O(n*logn) не выйдет
Тут кейс не просто отсортировать, а именно в комбинации head(sort(list)).
источник

λ

λoλdog in Compiler Development
источник

p

polunin.ai in Compiler Development
MaxGraey
Тут кейс не просто отсортировать, а именно в комбинации head(sort(list)).
Не вижу разницы. Просто ещё один метод снаружи добавили. В том что компилятор каким-то необычным образом догадается, что здесь поиск минимального элемента и превратит это в перебор по списку сомневаюсь.
источник

λ

λoλdog in Compiler Development
Вполне обычный образ
источник

λ

λoλdog in Compiler Development
Обычная редукция
источник

M

MaxGraey in Compiler Development
polunin.ai
Не вижу разницы. Просто ещё один метод снаружи добавили. В том что компилятор каким-то необычным образом догадается, что здесь поиск минимального элемента и превратит это в перебор по списку сомневаюсь.
Как бы вам объяснить. Вы знакомы с генераторами в императивных языках?
источник