Pawel
Тут я уже вмешаюсь Pawel, приведите результаты бенчмарка, иначе чем вы лучше тех, кого вы ругаете за отсутствие примеров?
можно и привести, но бенчмарк там не нужен, достаточно посмотреть на структуры данных и контекст их использования. Там копируются списки, для этого выделяются дополнительные чанки на каждой итерации алгоритма. Вот вам код быстрой сортировки на хаскиле, котрый по эффективности вроде бы аналогичен итеративному. И тред с пояснениями https://www.reddit.com/r/coding/comments/codqo/engineering_large_projects_in_a_functional/c0ur6yx/
саша
саша
этот код не эффективен. гошня, да и любая итеративная реализация быстрой сортировки работает быстрее и с меньшими затратами по памяти.
ща в хаскеле появятся линейные типы и можно будет писать типобезопасные чистые in place мутации, тогда хаскелевская быстрая сортировка будет ничем не хуже
Stanislav
если хвост можно оптимизировать, значит это итеративный алгоритм написанный через рекурсию
Anonymous
То есть бенчмарков нету Ну, всё ясно
А их и не будет, написать такое сравнение практически нереально
Anonymous
Не через time же замеры делать)
Мерль
Я вообще не понимаю зачем сравнивать скорости кстати Если рекурсивный подход удобнее – например при обходе структур, то лучше использовать его И наоборот Ты всё равно упрешься почти всегда во что-то другое
Pawel
То есть бенчмарков нету Ну, всё ясно
при чём тут бенчмарки , если реализация на хаскиле имеет сложность бОльшую, чем O ( n log ⁡ n ) ??
Сергей
Идея в том, что писать классические императивные алгоритмы на фп языках - это извращение. И наоборот
Pawel
https://play.rust-lang.org/?gist=75342b7290702231c4a42ad920d35d2b&version=stable&mode=debug&edition=2015
не знаю на счёт аморт. сложности, но этот код не читается проще аналогичного гошного
саша
при чём тут бенчмарки , если реализация на хаскиле имеет сложность бОльшую, чем O ( n log ⁡ n ) ??
Аналогичная реализация имеет на хаскеле ту же самую сложность. Другое дело, что аналогичная реализация, это реализация не для дефолтных списков, а для мутабельных массивов.
Мерль
при чём тут бенчмарки , если реализация на хаскиле имеет сложность бОльшую, чем O ( n log ⁡ n ) ??
Вам, как человеку якобы пишущему высокопроизводительные приложения, следовало знать, что О большое вообще говоря не определяет скорость алгоритма, а определяет увеличение сложности при росте каких-то параметров Ничто не мешает алгоритму O(n^3) быть быстрее алгоритма O(n^2), всё зависит от кучи условий
саша
не знаю на счёт аморт. сложности, но этот код не читается проще аналогичного гошного
аналогичный гошный код будет усыпан пустыми интерфейсами и тайп ассершенами
Yuri
мне кажется вы извращаете понятие O
Anonymous
Мерль
Я бы вообще не стал бы делать никаких предположений о виде роста сложности, учитывая что у нас идёт оптимизация на каждом слое: от трансляции до исполнения на функциональных блоках И это ещё без учета кэшей и предективной выгрузки из памяти
Pawel
И что?
вопрос риторический
Yuri
насколько я помню О - это относительная величина, она не сравнивает языки и их возможности.
Pawel
Я бы вообще не стал бы делать никаких предположений о виде роста сложности, учитывая что у нас идёт оптимизация на каждом слое: от трансляции до исполнения на функциональных блоках И это ещё без учета кэшей и предективной выгрузки из памяти
тут речь не об оптимизациях, а о информатике. сравнивется функционально-рекурсивный алгоритм, с императивно-итеративным по аморт. сложности и простоте реализации
Pawel
Так нас интересует сложность реализации или производительность кода? Вы уж определитесь
не производительность бинарника, а гарантии по аморт. сложности
Мерль
Откуда?
саша
не производительность бинарника, а гарантии по аморт. сложности
асимптотическая сложность - это свойство алгоритма, а не реализации как бы
Pawel
Нет никаких гарантий
Есть гарантии - O (n * log n) и O(1) по памяти. "Простой" алгормитм на хаскеле их не даёт, и по фигу что О может быть разным
David
и какое отношение она имеет к inplace квиксорту?
David
аморт - амортизированная?
саша
Есть гарантии - O (n * log n) и O(1) по памяти. "Простой" алгормитм на хаскеле их не даёт, и по фигу что О может быть разным
"Простой" алгоритм на хаскеле не является квиксортом, это каждому первокурснику очевидно
David
где что амортизируется в inplace qsort?
Мерль
Есть гарантии - O (n * log n) и O(1) по памяти. "Простой" алгормитм на хаскеле их не даёт, и по фигу что О может быть разным
Да? Так вас всё таки интересует потребление памяти, а не скорость работа или простота реализации? А у вас есть результаты замеров?
🏁Александр
честно говорят алгоритмы с нуля это какая то узкая совсем ниша
🏁Александр
"все украдено до нас"
саша
?
у алгоритма быстрой сортировки есть свойства, которым "простой" алгоритм на хаскеле не удовлетворяет
David
я правильно понимаю что тут обсуждается тот факт, что рекурсивный qsort на иммутабельном списке менее предпочтителен чем inplace? 🙂
Pawel
Да? Так вас всё таки интересует потребление памяти, а не скорость работа или простота реализации? А у вас есть результаты замеров?
да, меня интересует скорость и гарантии по потреблению памяти. Вы не согласны с тем, что "прстой" квиксорт на хакеле сложнее чем O (n * log n) / O(1) ?
David
и на этом основании делается выовод что хаскель - отстой? )))
Pawel
я правильно понимаю что тут обсуждается тот факт, что рекурсивный qsort на иммутабельном списке менее предпочтителен чем inplace? 🙂
"рекурсивный qsort на иммутабельном списке" - это школотронство, предназначенное для обучения, а не реального применения.
саша
Например?
например O(n) требование по памяти
David
я пока не понял какое отношение она имеет к qsort и мне очень интересно ))
саша
Удовлетворяет ж
нет, там расход памяти O(n²)
Pawel
нет, там расход памяти O(n²)
может быть больше либо меньше, но не суть
Мерль
да, меня интересует скорость и гарантии по потреблению памяти. Вы не согласны с тем, что "прстой" квиксорт на хакеле сложнее чем O (n * log n) / O(1) ?
А зачем вам асимптотическая сложность, если в реальности будет по-другому? Ведь, внезапно, в реальности у реализации на хаскеле потребление памяти скорее всего не растёт как n*ln(n)
Anonymous
саша
Смотри ещё раз)))
ладно, да, O(n * log n)
Anonymous
ладно, да, O(n * log n)
Ещё раз смотри
Vladimir
Ещё раз смотри
😂😂😂 каждое "ещё раз смотри" добавляет логарифм?
Pawel
А зачем вам асимптотическая сложность, если в реальности будет по-другому? Ведь, внезапно, в реальности у реализации на хаскеле потребление памяти скорее всего не растёт как n*ln(n)
я там выше приводил код с in place сортировкой на хаскиле. Вы егопроигнорили, а зря - лучшие учёные умы на хакеле бьются многие годы над тем, что любой джун на голанге напишет
Pawel
Оно хз какое
это всё придирки к словам. Оно не постоянное
саша
Ещё раз смотри
Что там ещё раз смотреть? Приходит список длинны n, мы поделим его на части log n раз. При этом после каждого деления у нас добавляется log₂k списков (где k - глубина текущей рекурсии), сумма длинн которых всегда равна n.
David
@bertolu4i поясните про аморт. сложность пожалуйста
Мерль
это всё придирки к словам. Оно не постоянное
Неа Вы не сможете спрогнозировать потребление памяти для языка со сборщиком мусора, ленивостью и сильно оптимизирующийся компилятором
David
в гугл и випедию плиз
я то в курсе что это такое, поясните какое отношение она имеет к qsort?
Мерль
я там выше приводил код с in place сортировкой на хаскиле. Вы егопроигнорили, а зря - лучшие учёные умы на хакеле бьются многие годы над тем, что любой джун на голанге напишет
Пожалуйста, напишите библиотечную функцию быстрой сортировки для go Чтобы было честно, пусть она работает каким в других языках с обобщёнными типами