Size: a a a

2021 February 14

к

кана in Haskell
пока не знал про локальные модули, оч часто хотел другую фичу из лиспов, которая чуть поуже: топлевелный лет

let x = 0 in
 a :: Int
 a = x + x

 b :: Int
 b = x + a
источник

AA

A64m AL256m qn<co... in Haskell
ну это не то чтоб из лиспов - нормальная емельная фича local
источник

AA

A64m AL256m qn<co... in Haskell
источник

к

кана in Haskell
ага, нашел в sml
источник

[

[BRM]White Rabbit in Haskell
Я же правильно понимаю, если мне хочется не O(n^2) в пограничных случаях, понадобится убить константу алгоритма?
Это вообще законная реализация квиксорта? А то я чёт сомневаюсь в её валидности....
источник

AA

A64m AL256m qn<co... in Haskell
[BRM]White Rabbit
Я же правильно понимаю, если мне хочется не O(n^2) в пограничных случаях, понадобится убить константу алгоритма?
Это вообще законная реализация квиксорта? А то я чёт сомневаюсь в её валидности....
это на самом деле трисорт с несбалансированным деревом
источник

к

кана in Haskell
ну, если взять описание алгоритма с википедии, то это полностью законная версия, дословная даже, можно покороче даже

qsort [] = []
qsort (x:xs) = qsort l <> (x : qsort r)
 where (l, r) = partition (< x) xs
источник

[

[BRM]White Rabbit in Haskell
хм
Прикольно) А можно дерево как-то забалансить?
источник

к

кана in Haskell
источник

A

Andrey in Haskell
кана
ну, если взять описание алгоритма с википедии, то это полностью законная версия, дословная даже, можно покороче даже

qsort [] = []
qsort (x:xs) = qsort l <> (x : qsort r)
 where (l, r) = partition (< x) xs
ну по-хорошему в квиксорте нужно случайный опорный элемент брать
источник

[

[BRM]White Rabbit in Haskell
кана
ну, если взять описание алгоритма с википедии, то это полностью законная версия, дословная даже, можно покороче даже

qsort [] = []
qsort (x:xs) = qsort l <> (x : qsort r)
 where (l, r) = partition (< x) xs
а оператор <> это типа конкат на максималках?
источник

к

кана in Haskell
а, ну да, в данном случае это ++ просто
источник

[

[BRM]White Rabbit in Haskell
Andrey
ну по-хорошему в квиксорте нужно случайный опорный элемент брать
со списками это константу убьёт
источник

A

Andrey in Haskell
Andrey
ну по-хорошему в квиксорте нужно случайный опорный элемент брать
интересно кстати, что от случайности зависит время работы, но не результат
то есть в грубом смысле (если не рассматривать время работы) пресловутая "ссылочная прозрачность" сохраняется
источник

A

Andrey in Haskell
но в хаскеле для случайности нужно будет какую-то монаду везде таскать
источник

[

[BRM]White Rabbit in Haskell
случайность опорного элемента сильно уменьшает вероятность попасть на O(n^2) кейс, т.к. для моей реализации достаточно сунуть предварительно отсортированный список - его будет  жевать квадрат итераций
источник

A

Andrey in Haskell
[BRM]White Rabbit
случайность опорного элемента сильно уменьшает вероятность попасть на O(n^2) кейс, т.к. для моей реализации достаточно сунуть предварительно отсортированный список - его будет  жевать квадрат итераций
она гарантирует среднее время работы n log n
источник

AA

A64m AL256m qn<co... in Haskell
[BRM]White Rabbit
хм
Прикольно) А можно дерево как-то забалансить?
можно, но проще мердж сорт использовать просто
источник

[

[BRM]White Rabbit in Haskell
Andrey
она гарантирует среднее время работы n log n
она не гарантирует этого)
если кости выпадут так, что случайный элемент всегда будет минимальным(а ты не можешь гарантировать, что такого кейса не будет), то всё равно квадрат получится)
источник

A

Andrey in Haskell
[BRM]White Rabbit
она не гарантирует этого)
если кости выпадут так, что случайный элемент всегда будет минимальным(а ты не можешь гарантировать, что такого кейса не будет), то всё равно квадрат получится)
я говорю про среднее время работы, то есть про матожидание
источник