Highloadcup2018
HighLoad Cup 2018
Install / Use
/learn @covrom/Highloadcup2018README
github.com/covrom/highloadcup2018
Мое решение для Highload Cup 2018.
В финале https://highloadcup.ru/ru/rating/ мое решение занимает 28 место с ~410 сек. штрафа и потреблением памяти 1,6-1,7 Гб.
Ноу-хау решения стал разработанный универсальный движок columnstore (db/column.go) для любого содержимого колонок
и быстрые intersect/merge-итераторы без аллокации памяти (db/coliter.go).
Все алгоритмы хэш или основанные на деревьях - не пригодились по причине того, что они сильно тратят память на указатели (именно на сами указатели, а не на данные), которые дополнительно еще обрабатывает и GC. Из-за этого было принято решение реализовывать алгоритмы на массивах, без указателей.
Для сети использовался fasthttp и fasthttprouter без переделок.
В папке docs содержатся материалы по inmemory column - базам данных.
Содержимое некоторых пакетов:
avltree- содержатся хорошие примеры реализации avl-деревьев, но они не пригодились при решении задачи.flysort- содержится бенчмарк алгоритмов добавления и сортировки "на лету" - линейный поиск и вставка, бинарный поиски и вставка, мин-хип. Мин-хип был использован в пакете suggest, однако надо помнить, что из-за отсутствия упорядоченности по уровням он выстраивает неточный список первых минимальных при принудительном ограничении длины массива, на котором он строится, и подходит только для поиска максимальных N элементов. Т.о. ограниченный мин-хип подходит только для поиска максимальных и упорядоченных по возрастанию N значений, а не минимальных.gentest- лежит утилита обработки исходных данных, для подсчета некоторых статистик.intsearch- содержится бенчмарк различных вариантов реализации бинарного поиска в сортированном массиве. Безусловный победитель - алгоритм на ассемблере. В ходе исследований выяснились разные интересные особенности компилятора, см. например, https://github.com/golang/go/issues/30366jumphash- содержится хэш-функция, которая не пригодилась.treebidimap- содержится алгоритм двунаправленной мапы, который тоже не пригодился.
Отдельная благодарность Сергею https://github.com/bochsdbg за участие в исследовании некоторых особенностей компилятора при boundary check.
Related Skills
node-connect
347.9kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
108.7kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
347.9kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
347.9kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
