- 1
- 2
- 3
- 4
>Сложность получается лучше O(1).
>Не надо бросаться грудью на амбразуру, посиди — подумай.
>Как оказалось, самый быстрый алгоритм — это линейный поиск и никакие map/bitset не нужны.
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−15
>Сложность получается лучше O(1).
>Не надо бросаться грудью на амбразуру, посиди — подумай.
>Как оказалось, самый быстрый алгоритм — это линейный поиск и никакие map/bitset не нужны.
Будни мамкиного питимизатора
https://habrahabr.ru/post/317588/
3.14159265 14.12.2016 22:51 # +3
А там Цари переобулись на C++.
dxd 14.12.2016 22:56 # +2
roman-kashitsyn 14.12.2016 23:19 # +4
При достаточно большом x задача решается без единой инструкции!
CHayT 14.12.2016 23:30 # +4
При фиксированном m c ростом n количество итераций будет уменьшаться, т.к. вероятность встретить 0 тоже уменьшается.
bayan 14.12.2016 23:39 # 0
roman-kashitsyn 15.12.2016 00:31 # +1
huesto 15.12.2016 00:59 # 0
roman-kashitsyn 15.12.2016 01:05 # 0
huesto 15.12.2016 01:22 # 0
huesto 15.12.2016 01:36 # 0
roman-kashitsyn 15.12.2016 01:45 # 0
huesto 15.12.2016 01:47 # 0
roman-kashitsyn 15.12.2016 01:49 # +2
huesto 15.12.2016 01:52 # 0
CHayT 15.12.2016 01:12 # 0
roman-kashitsyn 15.12.2016 01:21 # 0
CHayT 15.12.2016 01:30 # 0
roman-kashitsyn 15.12.2016 01:37 # 0
Ваша формула наверняка считает число попыток до первой "удачи", не включая саму "удачу". У нас же
> выбрать элемент по случайному индексу
Нам же нужно вернуть этот элемент, а не просто нагреть процессор, так ведь? Следовательно, "удачу" тоже считать надо, а для этого хотя бы одно движение сделать нужно.
CHayT 15.12.2016 12:30 # +1
* Это простое доказательство оставим для читателя
** Гиперреальную
roman-kashitsyn 15.12.2016 13:04 # 0
правильнее работает == подтверждает мою точку зрения?
CHayT 15.12.2016 13:48 # 0
roman-kashitsyn 15.12.2016 01:24 # 0
1+ из формулы можно успешно выпилить, да.
gost 15.12.2016 16:10 # +1
Чистые O(10/n) = O(1/n)!
3.14159265 15.12.2016 17:15 # +1
>Как оказалось, самый быстрый алгоритм — это линейный поиск
TPAXHY_B_AHYC 15.12.2016 17:22 # −2
3.14159265 15.12.2016 17:39 # +1
Не надо бросаться грудью на амбразуру, посиди — подумай.
TPAXHY_B_AHYC 15.12.2016 17:56 # 0
Dr_Stertor 15.12.2016 18:22 # −1
inkanus-gray 15.12.2016 05:20 # 0
CHayT 14.12.2016 23:24 # +4
3.14159265 15.12.2016 01:27 # +3
>он опережает все аналоги.
Он работает не во времени, но в пространстве!
roman-kashitsyn 15.12.2016 01:28 # +3
3.14159265 15.12.2016 01:39 # +3
dxd 15.12.2016 09:16 # +1
bormand 15.12.2016 07:04 # 0
dxd 15.12.2016 09:17 # +5
j123123 15.12.2016 22:54 # +1
dxd 15.12.2016 23:08 # 0
gost 15.12.2016 16:11 # 0
CHayT 14.12.2016 23:17 # 0
Экстраполяция: со временем Царь будет использовать языки всё выше и выше уровнем.
В какой-то момент он откроет, что перфоманс программы написанной в pointfree стиле является самым царским, интринсики сменятся на GHC rewrite rules.
Наконец он откроет для себя Wolfram Mathematica и функцию D.
roman-kashitsyn 14.12.2016 23:38 # 0
Кстати, надо будет поглядеть на код из Arrival, может, там чего весёлое найдётся
roman-kashitsyn 15.12.2016 00:04 # 0
Хм, врядли, там сын Вольфрама над кодом работал
3.14159265 15.12.2016 01:40 # 0
>интринсики сменятся на GHC rewrite rules.
Но всё-равно будет продолжать жрать кактус, пытаться "заставить инлайниться ассемблерный код".
bayan 14.12.2016 22:57 # +4
>Как оказалось, самая лучшая структура данных -- это массив, а никакие деревья не нужны
>Как оказалось, самое лучшее место для хранения данных это файл, разделенный запятыми, а никакие Oracle и MS-SQL не нужны
>Как оказалось, самый лучший issue tracker это желтые листочки на мониторе, а никакие jira/youtrack не нужны
>Как оказалось, самый лучший программист это я, а вы все не нужны
TPAXHY_B_AHYC 14.12.2016 23:00 # +1
Dr_Stertor 14.12.2016 23:15 # +1
3.14159265 14.12.2016 23:01 # +2
>Значит придётся смотреть комбинаторику, но мне это не сильно помогло, так как достаточного объёма знаний по этой теме я не имею, пришлось выписывать примерно такой же пример на бумажку и подумать.
>Идём самым простым путём: берём boost::multiprecision::uint128 — вот его нам хватит надолго! Это из-за того, что я пользуюсь MS CL, а он просто не поддерживает uint128, как все остальные компиляторы.
>Тут уже задача начинала надоедать, так как быстрее уже не получалось и я занялся C# версией. Всё перенёс туда. Нашёл уже готовый, написанный другим человеком UInt128 — примерно такой же простой, как и мой для C++.
>А вот самописный map проигрывает по всем статьям Dictionary. Видимо проверки границ массивов дают о себе знать, ибо увеличение памяти ничего не даёт.
>Дальше уже пошла совсем ерунда, даже была попытка оптимизировать сложение интринсиками, но чисто C++ версия оказалась самой быстрой. У меня почему-то не получилось заставить инлайниться ассемблерный код.
j123123 15.12.2016 23:15 # +2
В последнее время в прессе муссируются структуры данных. Абстрактные типы данных, структуры, указатели, списки и строки стали популярны в определенных кругах. Вирт, сосунок, написал даже целую книгу ("Алгоритмы + Структуры данных = Программы", Prentice Hall, 1976 [русский перевод - изд. "Мир", 198?]), в которой утверждает, что можно написать программу на базе структур данных, не используя другие способы. Как все настоящие программисты знают, единственной полезной структурой данных является массив. Строки, списки, структуры и наборы - это все разновидности массивов и их можно рассматривать как массивы без усложнения вашего языка приграммирования. Хуже всего с этими хитрыми типами данных то, что вы должны их описывать, а настоящие языки программирования, как мы все знаем, обладают возможностью неявного задания типа, основанного на первой букве 6-символьного имени переменной.
dxd 16.12.2016 00:35 # 0
Но это же ограничивает количество переменных целого типа, используемых в программе!
roman-kashitsyn 16.12.2016 01:24 # +2
dxd 16.12.2016 01:43 # 0
Серьёзно, я видел проект на фортране, где список переменных инклюдили в каждую функцию из отдельного файла.
bayan 16.12.2016 01:45 # +2
У меня в паскале были переменные i1, i2 .. iN, и я их переюзал.
Не потому что мне было жалко места в стеке, а потому что определять переменную можно было только вверху, и мне было лениво туда скролиться каждый раз.
TPAXHY_B_AHYC 16.12.2016 06:36 # 0
1024-- 16.12.2016 11:49 # 0
Соответственно, вход в контекст запилит новый список переменных, hold займёт свободную переменную из пула или создаст новую, release - освободит.
Вроде это универсальная фигня, хватит для всех популярных языков. Дальше для разных языков - только в объявлении разница будет.
Для объявления указателей на функции и массивов в C/C++ можно использовать typedef, затем ~hold f:my_fun_t сработает как надо.
1024-- 19.12.2016 16:52 # 0
roman-kashitsyn 14.12.2016 23:31 # 0
bayan 14.12.2016 23:37 # +1
Ох, может и правы были жабоёбы, когда не завезли в свой ЯП препроцессора.
Может быть и с C# он зря.
Одно дело DEBUG передать, но за "#if (SEARCHMAP)" _посреди_ метода надо убивать
3.14159265 15.12.2016 01:26 # +1
bayan 15.12.2016 01:37 # +1
3.14159265 15.12.2016 01:42 # 0
nihau 15.12.2016 14:09 # +1