Грокаем алгоритмы

Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих от Бхаргава А. Эта книга рекомендована Яндекс Практикум при подготовке к алгоритмическому собеседованию. Сам автор указывает, что книга для самоучек, студентов, выпускников и тех, у кого программирование не является основным профилем.
Мое впечатление неоднозначно. С одной стороны, до сего момента я не встречал описания динамического программирования, поиска кратчайшего пути в графе по алгоритму Дейкстры и использование K ближайших соседей для классификации и аппроксимации (возможно, все это есть в 4 м или последующих томах Кнута, но в магазине они мне не встречались). С другой стороны, описания и примеры, приведенные в книге, таковы, что практической пользы не представляют. Описания очень поверхностны, примеры нарочно примитивны, код в половине случаев не приведен. Но даже там где есть код, он нарочито упрощен под конкретный пример и на практике бесполезен.
Казалось бы, есть масса книг — каталогов шаблонов. Они реально полезны и новичку и профессионалу. Эта книга не из их числа. Но, видимо, это и не было целью. Напоминает научно-популярные книги издававшиеся в СССР: простым языком рассказывает о сложных вещах, прививает у читателя интерес к теме, расширяет кругозор. Не более. Но тоже важно.
Вернемся к Яндекс Практикум и их рекомендации. Если алгоритмы так важны, то почему именно эта книга? Есть масса других, где и алгоритмов больше и разобраны они так, что бери да пользуй. Например, классический труд Д. Э. Кнута Искусство программирования. Да, рисунки в детском стиле в Грокаем алгоритмы забавны. Но иллюстрации в Искусство программирования полезны для понимания. Разве это не важнее, если уж кандидата посылают на алгоритмическое собеседование?

Если алгоритмы так важны с точки зрения Яндекс Практикум, то почему они советуют именно Грокаем алгоритмы, где приведены далеко не самые эффективные реализации? К примеру, сортировка выбором (в ГА) создает новый массив, который, к тому же, динамически растет. У Кнута приведен алгоритм сортировки выбором с обменом (5.2.3), не требующий дополнительной памяти ни на копию, ни на копию копии при динамическом росте.
На сколько по полочкам у Кнута разобрана работа стека, на столько же сумбурно про это рассказано в Грокаем алгоритмы.

А ведь это база для рекурсивных алгоритмов. Про то, что стек может быть конечного и даже малого размера в ГА не сказано. Лишь упомянуто вскользь, что могут быть высокие затраты памяти. А ведь, как правильно указано в 1 м томе «Информатика. Основополагающее введение» от Манфреда Броя, при каскадной рекурсии «вызовы лавинообразно ведут к экспоненциальному нарастанию возникающих рекурсивных вызовов («каскад вызовов»)». И именно такой вариант быстрой сортировки расщеплением приведен в ГА. Также автор не стесняется склеивать три массива на каждой итерации. Если важна эффективность, как уверяет Яндекс Практикум, то быструю сортировку надо смотреть не в ГА, а снова у Кнута, где алгоритм обменной сортировки с разделением (5.2.2) не требует ни дополнительной памяти, ни склеивания половин.
Не менее интересно в ГА разобраны хеш-таблицы и хеш-функции, о которых нам «никогда не придется беспокоиться» ибо об этом уже побеспокоились «пожилые бородатые умники, сидящие в полутемных комнатах» (цитата из книги). Ладно, если бы это было просто безобидно, но автор рекомендует использовать SHA при реализации своих хеш-таблиц. И где будет эффективность, о которой говорит Яндекс Практикум? Для сравнения, если просто почитать 6.4 в т.3 Кнута, то станет по крайней мере понятно почему до Java 7 стандартный шаблон сгенерированного hashCode() выглядел следующим образом:
public int hashCode()
Поиска в ширину и жадных алгоритмов в первых трех томах Кнута нет. Но их описание в ГА можно сравнить с описанием в «Искусственный интеллект. Стратегии и методы решения сложных проблем» от Джорджа Ф. Люгер. В ГА более длинно и более разжёвано, а потому и более понятно.
Алгоритма Дейкстры для поиска кратчайшего пути, равно как и динамического программирования в моей библиотеке ранее не было. Однако глубина изложения и примитивность примеров в ГА не позволяют их сходу использовать на практике. Автор запросто опускает начальные условия и приводит код под конкретный пример. Все это безобразие венчает «а это моя формула»:

Вместо объяснения как он пришел к данной «формуле» или в чем ее физический смысл, дабы читатель мог использовать схожий подход в своей практике, автор успокаивает: «Если у вас голова идет кругом, не огорчайтесь. Это сложный материал». И по алгоритму Дейкстры, и по динамическому программированию я бы рекомендовал дополнительно почитать https://ru.algorithmica.org. Так оно будет гораздо понятнее, чем только после прочтения ГА.
На методе K ближайших соседей автор ГА либо устал, либо сам толком метод не освоил. Об этом можно судить и по корню в Евклидовой метрике, и по отсутствию нормализации. Если у нас миллионы точек в многомерном пространстве, то найти по запросу таким образом 5 соседей на практике вряд ли получится, особенно, если запросы приходят в параллель. Книга не упоминает, что все это очень дорого и по памяти, и по времени. А ведь Яндекс Практикум говорит именно об эффективности. Чтобы более полно ознакомиться с методом K ближайших соседей и понять аспекты его практического применения, вариации и альтернативы, я бы рекомендовал описание в онлайн-учебнике по машинному обучению от Школы анализа данных.
Все, что идет в книге далее, несерьезно рассматривать более чем как see also.
Что можно сказать резюмируя? В принципе, выполнение упражнений полезно (как минимум, я снова убедился, что писать на Java проще, чем на C++). Также опытный разработчик может встретить какие-то новые вещи — это тоже всегда полезно. Не программисты и начинающие разработчики наверняка найдут книгу легкой в чтении и увлекательной. И это хорошо. Но вообще хотелось бы каталога алгоритмов наподобие GoF, EIP, Software Architecture Patterns and Designing Distributed Systems.
Алгоритмы: теория и практика. Методы
В курсе будут разобраны основные алгоритмические методы: жадные алгоритмы, «разделяй и властвуй», динамическое программирование. Помимо теоретических основ, будут рассмотрены тонкости реализации рассмотренных алгоритмов на языках C++, Java и Python. Слушателям будет предложено реализовать большинство разобранных в… Ещё
5-7 часов в неделю
Сертификат Stepik
Начать просмотр
147 818 учащихся
О курсе
Алгоритмы — важнейший раздел computer science и программирования. Благодаря развитию информационных технологий и алгоритмам мы сегодня имеем возможность быстро находить информацию в интернете (в частности, искать по картинкам), находить кратчайшие пути, анализировать геномы и так далее. Алгоритмы используются практически во всех областях computer science — в анализе изображений, в интернет-поиске, в машинном обучении, в биоинформатике, в криптографии, в кодировании, в сетях, в распределённых системах, в компиляторах.
В курсе будут подробно разобраны базовые алгоритмические методы: жадные алгоритмы, метод «разделяй и властвуй», динамическое программирование. Для всех алгоритмов будут математически строго доказаны корректность и оценки на время работы. Мы постарались изложить материал так, чтобы были понятны и сами алгоритмы, и то, как можно было бы догадаться до их основных идей. Помимо теоретических основ, будут рассказаны тонкости реализации алгоритмов на языках программирования C++, Java и Python. В частности, будет рассказано, какие есть общие практики написания кода, позволяющие минимизировать вероятность ошибки, как писать и тестировать код, где стоит использовать стандартные методы, а не изобретать колесо.
Мы тщательно подобрали задачи для закрепления материала. Большинство алгоритмов, которые вы узнаете, вам нужно будет запрограммировать. Это лучший способ убедиться, что вы разобрались во всех деталях. Решая такие задачи, вы получите ценный опыт написания и отладки эффективных и надёжных программ. Задачи на программирование помогут вам почувствовать разницу между плохим (медленным) и хорошим (быстрым) алгоритмом. Вас также ждут тесты (где нужно выбрать правильные ответы из предложенных) и теоретические задачи (в них нужно доказать математическое утверждение). Наконец, в курсе есть также задачи повышенной сложности — менее стандартные задачи, которые не являются обязательными для прохождения курса. Получить удовольствие от решения этих задач смогут и те, кто уже знаком с базовыми алгоритмами.
Для кого этот курс
Студенты младших курсов и школьники.
Начальные требования
Знание одного из распространённых языков программирования (C++, Java, Python, Octave, Haskell) на базовом уровне: циклы, массивы, списки, очереди. Базовые знания математики: доказательство от противного, доказательство по индукции, логарифм, экспонента. Для освежения математических знаний рекомендуется прочесть брошюры Александра Шеня: «Математическая индукция», «Логарифм и экспонента» (тексты которых легко находятся в интернете).
Царство Алгоса

Боль можно культивировать.
Коллаж Михаила Бойко
Боль сопровождает нас на протяжении всей жизни. Неуничтожимая, неизловимая и неотторжимая. Сокровенная, своевольная и священная. Она пропитывает все наше существо. И даже когда нам кажется, что она оставила нас, на самом деле она уснула.
Философы и психологи спорят о титаническом противостоянии Эроса и Танатоса, об искре человеческой жизни, мечущейся меж могучих полюсов. В действительности Эрос и Танатос – не антагонисты. Это две гавани, в которых человек спасается от напасти еще более жуткой, имя которой – Алгос.
Эрос и Танатос соблазняют нас, но мы откладываем наслаждение и самоубийство. Эрос и Танатос пугают нас, но нам не страшно.
И только Алгос лишает нас разума и свободы воли.
В дальнейшем нам понадобится термин «экзистенциал» в его исходном хайдеггерианском смысле: экзистенциалы так же относятся к экзистенции, как категории – к разуму ( М.Хайдеггер. Бытие и время).
Мы утверждаем, что боль – это наиболее фундаментальный экзистенциал . Прочие экзистенциалы – модусы, производные, измененные формы первичного экзистенциала.
Под первичной болью мы подразумеваем, конечно, не боль в привычном, повседневном понимании, а скорее ее субстрат. Метаболь. Алгос.
Энергетический аспект Алгоса мы будем обозначать словом алгидо (по аналогии с libido).
Есть ли другие экзистенциалы, способные претендовать на звание первичных? Сколько угодно. Любовь, наслаждение, воля, тоска, забота, вина и т.д. Почему же мы отдаем предпочтение Алгосу?
Решающий аргумент известен со времен античности, но окончательной формулировкой обязан Артуру Шопенгауэру. В главе «О ничтожности и страданиях жизни» второго тома «Мира как воля и представление» Шопенгауэр возвестил: «Прежде чем уверенно утверждать, что жизнь – желанный и достойный благодарности дар, следовало бы беспристрастно сравнить сумму всех возможных радостей, которые человек может испытать в своей жизни, с суммой всех возможных страданий. Я думаю, что подвести итог будет нетрудно. В сущности, совершенно излишне спорить о том, больше ли на свете блага или зла. Поскольку уже сам факт существования зла решает этот вопрос – зло никогда не может быть устранено или уравновешено благом, существующим наряду с ним или после него┘»
Если вас не убеждает этот аргумент, не убедит никакой другой. Все они глубочайшим основанием имеют «аргумент Шопенгауэра».
Герои «1984» Оруэлла верили в Эрос. Им казалось, что от предательства их спасет Танатос. Что любовь всегда может восторжествовать в смерти. Но у всякого Эдема стоит херувим с огненным мечом. У входа в царство Танатоса стоит Алгос. Собственно, об этом роман «1984», а не о социализме, как кто-то, может быть, наивно полагает.
Мы рано или поздно убеждаемся во всемогуществе Алгоса. Это необязательно травма. Это может быть царапина, вопрос в заостренной форме. В царстве Алгоса раны не зарастают, а расползаются.
Как-то в шесть лет, накануне новогодней ночи, я сидел перед свечой. Мне неудержимо хотелось схватить пламя. Но как только я подносил пальцы к свече, нестерпимо жгло и что-то отдергивало руку назад. Меня это злило до слез. Никак не мог понять, почему рука отдергивается. Казалось, что внутри меня сидит кукловод, который смеется над моей свободой воли. Снова подносил пальцы к пламени и явственно ощущал противоборство двух стремлений. Боль маячила где-то на задворках сознания, как облачко на горизонте. Я не соотносил ее с собой, она была мне безразлична, как ненастье за окном. Но какая-то непонятная сила вновь отдергивала мою руку назад.
Где-то в девять лет я отдыхал с родителями на базе отдыха. В дождь забежал на веранду, где сидел мальчик постарше меня. В руках у него была булавка. Он оттягивал кожу на кисти, так что образовывалась складка, и прокалывал ее булавкой. Вынимал иглу и вновь собирал кожу в складку. Проделывал он это машинально, без эмоций на лице. Рука покрылась красными точками, на некоторых выступили капельки крови. Пусть лучше б мне так прокалывали руку, только чтоб он прекратил это занятие. Очертя голову я бросился с веранды.
Почему разговор о боли вызывает внутреннее сопротивление, чувство стыда, неловкость, желание прервать его или свести к незначительным частностям? Мы слишком боимся боли. И чужой, и собственной. И чужой больше, чем собственной.
А прежде было иначе. Как озарило Фридриха Ницше, только наше лицемерие «противится тому, чтобы в полную мощь представить себе, до какой степени жестокость составляла великую праздничную радость древнейшего человечества, примешиваясь как ингредиент почти к каждому его веселью; сколь наивной, с другой стороны, сколь невинной предстает его потребность в жестокости, сколь существенно то, что именно «бескорыстная злоба» (или, говоря со Спинозой, sympathia malevolens) оценивается им как нормальное свойство человека, – стало быть, как нечто, чему совесть от всего сердца говорит Да!» ( Ф.Ницше. К генеалогии морали).
Мы слишком любим боль. И собственную, и чужую. И собственную больше, чем чужую.
![]() Когда боль становится нестерпимой. Фото Михаила Бойко |
Садизм социально опасен, мазохизм безобиден. Почему же мазохизм леденит кровь сильнее, чем садизм?
Садизм понятен, мазохизм непостижим. Садизм – отголосок дочеловеческого, вестник из мрака прошлого. Мазохизм – отголосок постчеловеческого, вестник из мрака будущего.
Легко понять замешательство Мишеля Уэльбека, приступившего в «Платформе» к картографированию сексуального ландшафта Европы: «Палачей я еще хоть как-то могу понять, они мне отвратительны, но я знаю, что существуют люди, которым нравится истязать других; с чем я не в состоянии смириться, так это с поведением жертв. Как человек может дойти до того, чтобы предпочитать страдания радости? Не знаю, таких надо перевоспитывать, что ли, любить их, учить наслаждаться».
Казалось бы, нет ничего проще принципа удовольствия. Человек стремится к максимуму удовольствия, потому что такова его природа. Продвинуться дальше в понимании принципа удовольствия практически невозможно, ибо это означало бы взглянуть на человеческую природу с нечеловеческой точки зрения.
Задолго до Фрейда об этом писал Дэвид Юм в «Исследовании о принципах морали» (1751): «Представляется очевидным, что конечные цели человеческих поступков ни в коем случае не могут быть объяснены исходя из разума, но полностью опираются на чувства и привязанности людей вне какой-либо зависимости от их интеллектуальных способностей. Спросите какого-либо человека, почему он занимается телесными упражнениями, и он ответит: потому что желаю сохранить свое здоровье. Если вы затем будете допытываться, почему он хочет быть здоровым, он с готовностью ответит: потому что болезненное состояние приносит страдания. Если вы продолжите ваши изыскания и захотите узнать причину того, почему он ненавидит страдания, то он не сможет дать когда-либо какой-нибудь ответ. Это уже конечная цель, и она никогда не будет сведена к какой-то другой Невозможно, чтобы в данном случае имел место прогресс ad infinitum и всегда оказывалось, что какая-то одна вещь является причиной того, почему желают другой вещи. Должно быть нечто такое, чего желают ради него самого и вследствие его непосредственного согласия или соответствия с человеческими чувствами и привязанностями».
Здесь и коренится проблема. Жиль Делёз в «Представлении Захер-Мазоха: Холодное и Жестокое» подступил к ней, отталкиваясь от слова «принцип»: «Здесь и возникает необходимость в философской рефлексии. Принципом прежде всего называют то, что управляет какой-то областью; в этом случае речь идет об эмпирическом принципе или законе. Так, принцип удовольствия управляет (не зная исключений) душевной жизнью в Оно. Но совсем другое дело – вопрос о том, что именно подчиняет данную область принципу. Следует найти принцип иного рода, принцип второго порядка, который объяснил бы необходимость подчинения области эмпирическому принципу. Именно этот второй принцип и называют трансцендентальным. Удовольствие – принцип, поскольку оно управляет душевной жизнью. Но какова та наивысшая инстанция, которая подчиняет душевную жизнь эмпирическому господству принципа удовольствия?»
Под объяснением второго порядка имеется в виду принцип высшего порядка в духе Тарского – метапринцип. В терминологии Канта – трансцендентальный принцип.
Далее Делёз ссылается на Юма и Фрейда: «Уже Юм отмечал: в душевной жизни имеются как удовольствия, так и страдания, но, сколько бы мы ни поворачивали всеми их гранями идеи удовольствия и страдания, нам никогда не разглядеть здесь формы какого-то принципа, согласно которому мы ищем удовольствия и бежим от страдания. Фрейд говорит то же самое: от природы в душевной жизни имеются ощущения удовольствия и боли; но появляются они нерегулярно, то здесь, то там, находясь в свободном состоянии: рассеянные, плавающие, «несвязанные». Принцип же, организованный таким образом, чтобы удовольствие систематически преследовалось, а боль – избегалась, требует объяснения высшего порядка» (ibid).
Теперь мы можем очертить проблемную область алгософии и дать определение новой дисциплине. Алгософия – исследование трансцендентальных оснований принципа удовольствия.
«Короче говоря, имеется по крайней мере нечто, чего принцип удовольствия не объясняет и что остается внешним по отношению к нему, и это нечто есть как раз то, что придает ему значимость принципа в душевной жизни. Каково же это связывание высшего порядка, превращающее удовольствие в принцип, возводящее его в ранг принципа и подчиняющее ему душевную жизнь? Можно утверждать, что поставленная Фрейдом проблема представляет собой нечто прямо противоположное тому, что ему часто приписывают: речь идет не об исключениях для принципа удовольствия, но об обосновании этого принципа. Речь идет об открытии какого-то трансцендентального принципа – о «спекулятивной» проблеме, как уточняет Фрейд» (ibid).
Принцип удовольствия часто рассматривается в связи с вопросом о «смысле страдания и боли». Делёз в данном случае следует Ницше: «Поставив в высшей степени спиритуалистическую проблему о смысле страдания, Ницше дал на нее единственно достойный ответ: если страдание и даже боль имеют какой-то смысл, то он должен заключаться в том, что кому-то они доставляют удовольствие. Если двигаться в этом направлении, то возможны лишь три гипотезы. Гипотеза нормальная, моральная или возвышенная: наши страдания доставляют удовольствие богам, которые созерцают нас и наблюдают за нами. И две извращенные гипотезы: боль доставляет удовольствие тому, кто ее причиняет, или тому, кто ее претерпевает. Ясно, что нормальный ответ – наиболее фантастический, наиболее психотический из трех» (ibid).
В чем же смысл удовольствия? Этот вопрос не встает перед нами в такой острой форме только потому, что удовольствие реже подвергается философской рефлексии, чем боль и страдание. Однако и на этот вопрос должен быть получен ответ.
Стоит поставить под сомнение принцип удовольствия, как большинство человеческих решений предстают трансцендентально не обоснованными. Алгософия предлагает непривычный взгляд на мотивацию человеческих поступков. Освоиться с новым взглядом можно на практике. Помогает, в частности, языковая игра, автор которой – Патрик Ноуэлл-Смит ( П.Х. Ноуэлл-Смит. Логика прилагательных// Новое в зарубежной лингвистике, вып. 16. М., 1985).
В несколько модифицированном виде она выглядит так.
Диалог № 1.
А: Я возьму баранину.
В: Почему?
А: Потому что я предпочитаю баранину говядине.
В: Почему то, что вы предпочитаете баранину говядине, является основанием для того, чтобы выбрать ее?
Диалог № 2.
А (выбирая за кого болеть) : Я болею за Джонса.
В: Почему?
А: Потому что это лучший вратарь.
В: Почему то, что он лучший вратарь, является основанием для того, чтобы выбрать его?
Диалог № 3.
А: Я заплачу мяснику.
В: Почему?
А: Потому что я ему должен.
В: Почему наличие долга является основанием для того, чтобы ему заплатить?
Что делает В? Он пытается вставить логический клин между решением и его обоснованием. Ноуэлл-Смит замечает: «С точки зрения формальной логики В прав. Ни в одном случае обоснование, приводимое А, поскольку оно является высказыванием о факте, не влечет за собой логического решения сделать то, что он решает сделать. Следует заметить, что хотя в каждом случае и дается обоснование, эти обоснования разного характера, и легко убедиться, что они по-разному связаны с решениями. В первом случае обоснованием является выражение субъективного предпочтения, во втором – объективное верифицируемое утверждение о факте, в третьем – указание на обязанность».
Различие ситуаций не должно нас смущать. Во всех трех случаях предполагается, что удовольствие всегда желательно и не только для того, кто к нему стремится. Напрашивается продолжение этой игры.
Диалог № 4.
А (доктору) : Избавьте меня от боли.
В: Почему?
А: Потому что мне больно.
В: Почему наличие боли является основанием для того, чтобы от нее избавиться?
Мир, увиденный сквозь призму алгософии, предстает как алгореальность. Алгореальность – мельтешение элементарных алгем. Алгема – атомарный факт алгореальности.
Алгореальность как знаковую систему исследует алгосемиотика. Можно показать, что алгознаки являются наиболее первичными из всех знаков по причине наиболее тесной связи с прагматикой. Можно предположить, что алгосемиозис – ключ к пониманию вопроса о возникновении создания (как в процессе филогенеза, так и онтогенеза).
Во многих отношениях алгософия изоморфна «шизософии» Вадима Руднева, основные концепты которой – шизореальность/ шизема/ шизосемиотика ( В.Руднев. Введение в шизореальность).
Может показаться, что алгознаки настолько близки к подлинной реальности, что практически совпадают с ней. Похоже, к этому склонялся Шопенгауэр. Боль приближает к познанию сущности мира, «которая есть воля, пожирающая сама себя», а наслаждение уводит в иллюзии, грезы, царство Майи.
Однако строгое рассмотрение вопроса приводит к прямо противоположному выводу. Именно наслаждение позволяет вырваться за пределы Я, дает пусть иллюзорную, но хоть какую-то возможность постижения объектов и других субъектов. Боль, наоборот, уводит внутрь.
Наиболее последовательно эту точку зрения высказала Ханна Арендт. Процитировав, как полагается, Юма, она продолжила: «Причина этого своеобразного обстоятельства та, что только боль, но никогда не наслаждение, совершенно независима от какого-либо объекта, будучи вообще единственным состоянием, в каком человек действительно ничего не чувствует кроме самого себя; в удовольствии, наоборот, наслаждается не самим собой, а предметом. Боль есть единственное поистине абсолютное внутреннее чувство, которое по беспредметности вполне может соперничать с логическими и математическими умозаключениями и убедительная сила которого вполне сравнима с силой очевидности этих последних» ( Х.Арендт. Vita active, или О деятельной жизни).
Алгософия – одна из самых фундаментальных философских дисциплин, уступающая в этом отношении разве что нигилософии.
Для вводного очерка – достаточно.
Комментарии для элемента не найдены.
Алгоритмы и структуры данных
![]()
Обучающие статьи о Computer Science, оптимизации кода и использование классических алгоритмов и структур данных в решении задач.
Подписаться
30 дек 2022 30 дек 2022 в 11:30
Системы для работы с данными: зачем нужны и как их построить
Рассказываем, как построить качественную инфраструктуру для работы с данными, какие нужны специалисты и как выйти с решением на рынок.
29 сент 2022 29 сент 2022 в 09:56
Алгоритмы сортировки на Java с примерами
Рассматриваем популярные алгоритмы сортировки и принципы их работы с примерами на языке программирования Java.
12 авг 2022 12 авг 2022 в 10:34
Алгоритмы сортировки: зачем они нужны?
Где на практике применяются алгоритмы сортировки, и применяются ли? Или же их важно знать только для собеседований? Давайте разбираться.
29 июля 2022 29 июля 2022 в 12:22
Алгоритмическая задача про острова
Решаем алгоритмическую задачу с собеседований про острова несколькими способами: реализация на языках Java и C#.
17 июня 2022 17 июня 2022 в 09:03
Адовые задачи с собеседований для программистов
Держите пять непростых задач с интервью для программистов. Большинство из них имеет несколько решений. Предложите своё?
11 мая 2022 11 мая 2022 в 11:45
Как искать данные в пространстве невероятно быстро? R*-tree в Go
Как использовать R*-tree, чтобы обновлять данные об игроках на сервере даже при онлайне в 1000 человек и выше.
