Super
The sort algorithm is not stable
Super
вот в чем проблема основная
Super
ну по крайней мере видно теперь, где проблема
Snusmumriken
Я про это тебе говорил прямым текстом :<
table.sort — это quiksort. Его отличительная особенность как раз то, что он в среднем быстр, но выдаёт произвольный порядок одинаковых значений
Super
ага, осталось найти нормальный вариант merge sort или самому написать
Super
не могу найти готового модуля вроде cjson
Super
было бы здорово, если бы такое было
Snusmumriken
Rosetta code
Super
там нестабильный алгоритм на луа, ну по крайней мере что я нашел
Snusmumriken
Там много алгоритмов.
Кстати, merge, помнится, тоже нестабильный.
Пузырьки давай. Или гномов.
Ты что, не справишься с пузырьками?
Super
https://en.wikipedia.org/wiki/Sorting_algorithm#Stability
Super
ну да, видимо придется другой взять, т.к. на розетта коде хороший код
Super
просто странно что мерж сорт там указан как стабильный
Snusmumriken
Я могу путать. Энивей, ты возишься с сортировкой уже полтора-два часа, хотя мог бы написать bubble за пять минут : )
Snusmumriken
Или у тебя там списки на сто тыщ мильярдов значений, и погромистская гордость не позволяет идти такими простыми методами?
Snusmumriken
(a bubble — всего за пять минуточек, ибо тупая как три копейки)
Super
просто ищу лучший и самый оптимальный способ
Super
до 1000
Snusmumriken
О да. И сложность On в лучшем случае!
Super
но таких сортировок много может быть
Super
одновременных в смысле в нгинксе
Snusmumriken
до 1000
Ой, ты сэкономишь пятьсот процессорных тактов.
Super
ну хочется оптимально сделать т.к. нагрузка большая
Snusmumriken
Super
ну дробить массив на части?
Super
если честно, сильно много я с этим дела не имел
Snusmumriken
ну дробить массив на части?
Ну типа. Это когда тебе надо найти элемент условно больше/меньше определённого значения.
Как игра "больше-меньше".
Делишь массив пополам, смотришь, искомое должно быть больше или меньше центрального.
Потом смотришь ту половину, в которой находится искомое, точно так же делишь пополам и т.п.
Snusmumriken
Это - самый эффективный способ поиска в сортированных больших данных, из не требующих дополнительной памяти.
Super
буду сейчас разбираться, спасибо. я медленно разбираюсь т.к. по сути с этим дела никогда толком и не имел.
Super
но хочу сделать хорошо, максимально оптимально
Snusmumriken
Но только вот ведь незадача: на малых данных (условно до 50 элементов) — он менее эффективен обычного перебора значений, так как требует делений. Поэтому тупой перебор оказывается быстрее.
Super
в среднем - 200-300 значений
Snusmumriken
Я тебе не про то. Экстраполируй мои слова на свою задачу.
Super
да, я понял идею
Super
т.е. возможно и не нужно использовать супер алгоритм т.к. на малом количестве значения он будет даже хуже
Snusmumriken
Ты в курсе что в некоторых условиях, bubble оказывается быстрее и круче quiksort'а? (когда массив почти отсортирован, например, хотя гномы тут ещё круче), и не требует доп-памяти?
Карочи, не совокупляй себе и окружающим моск, сделай сначала так чтобы работало, улучшать будешь как понадобится.
Предварительные оптимизации == плохо.
Super
угу, спасибо, буду пробовать
Dima
В Lua есть налог printf как например: в Ruby puts "The number is %d" % [5], или string intepolation как в Ruby и JS: p "Number #{2+2}" console.log(' Number ${2+2}')?
Oleg
string.format
Dima
Dima
Входить в новый язык интересно, новый мир, свои акронимы, например PiL => Programming in Lua
Lucky
спасибо
Что пилить собираешься, если не секрет?
Lucky
с jit и ffi он ещё быстрее
Dima
ясно вызов модулей из C
Korsar
ffi это ssh, когда по клавиатуре сильно промахнулся
Lucky
https://habr.com/ru/post/113804/
Dima
Lucky
это уже проблема в программисте
Super
я думаю это сам ффи не особо хорошо работает, хотя могу и ошибаться
Super
почти любой модуль будет вызывать утечки, такое ощущение по крайней мере
Lucky
например так https://github.com/technix/instead-playground
Lucky
но вряд ли автор статьи именно это имел в виду
Lucky
скорее он сравнивал работу жса в браузере и луы в интерпретаторе
Lucky
скорее всего брал наиболее свежие интерпретатор и браузер
Lucky
на тот момент
Lucky
но суп не в этом
Super
как по мне, сравнение не в пользу луа. он использовал хитрость для повышения скорости. и эта хитрость вполне может привести к утечкам памяти на больших объемах трафика.
Lucky
помнится, мне баили, что и жс умеет в jit
Dima
Есть ли способ в Lua посомтреть массив также как в Ruby p array?
Dima
какой-то инстурмент быстрой оценки что лежит в таблице
Lucky
итераторами только наверно
Super
мне кажется в случае использования на сайтах луа выигрывает по той причине, что не нужен коннект на соккет, поэтому и работает быстро
Lucky
хотя, в метатаблицу можно наверно зарядить способ поинтереснее
Lucky
https://habr.com/ru/post/346892/
Dima
Lucky
Это Снусу спасибо, он автор.
Lucky
Вот ещё http://computercraft.ru/topic/1090-metatablitsy-lua/
Super
добротная статья
Dima
и Снусу спасибо тоже.
Super
да, он крутой
Super
я кстати вчера в итоге сделал сортировку стабильную, причем использовал table.sort-таки
Super
реализовал и пузырьковый вариант и инсершен вариант, правда не потестировал еще, но думаю вариант с table.sort будет самым лучшим
Snusmumriken
Super
а есть какая-нибудь статья, как это правильно делать?