TGViewer
dev notes dev notes @junsenior · 1.39K subscribers
Post #216 1.29K
Благодаря обзору от https://t.me/johenews приобрёл себе "Golang для профи" Михалиса Цукалоса. Вывод после первых 200 страниц: автор хорошо знает свой материал, делится огромным массивом знаний, и почти не льёт лишней воды, но структура книги и порядок изложения информации кажется немного сумбурным. С другой стороны, аудитория - явно знакомые с синтаксисом языка люди, имеющие какой-то опыт в разработке, которые и без плавных переходов должны понимать материал. Так что, учитывая полное отсутствие нормальной литературы по golang, книжка весьма и весьма хорошая.

А я, тем временем, начиная с 5-ой главы, решил начать вести краткие конспекты, как ранеее делал с "Высоконагруженными приложениями" Клеппмана, и "Микросервисами" Ричардсона. Так что, ловите первый конспект по главе "Как улучшить код Go с помощью структур данных".

Автор даёт интересное определение сложности алгоритма: сложность алгоритма определяется главным образом тем, сколько раз алгоритму для выполнения его работы требуется доступ к входным данным.
В go большинство операций, таких как поиск значения по ключу в хеш-таблице, или доступ к элементу массива, имеют постоянное время - О(1).
Не все структуры данных одинаковы: в go операции с массивами выполняются быстрее, чем операции с хеш-таблицами.
Первая рассматриваемая автором структура - двоичное дерево. Реализация - https://github.com/PacktPublishing/Mastering-Go-Second-Edition/blob/master/ch05/binTree.go
Если нам нужно представить иерархические данные - нет ничего лучше двоичного дерева. Если дерево сбалансировано, то операция поиска, вставки и удаления элементов выполняются за log(n), а высота дерева приблизительно равна log^2(n). Например, высота дерева из 100 000 элементов - 17, а из 1 000 000 - около 20. Т.е. мы можем достичь любой элемент дерева за менее чем 20 шагов, что очень круто.

Двоичное дерево следует использовать только если у дерева простые ключи, чтобы операции вставки и поиска не были слишком сложные, и если дерево возможно поддерживать в упорядоченном виде, чтобы не нарушать ассимптотику операций вставки, поиска и удаления. При этом важно понимать, что массив или список создаются и инициализируются быстрее, но скорость получения данных, предоставляемая двоичным деревом, порой может окупить потерю времени при инициализации.
More from @junsenior
  1. Sep 28, 2026Сошлись две вещи. Первая - мой проект safemap.ai, про который я уже писал выше - интеракти…
  2. Sep 17, 2026Post #356
  3. Sep 15, 2026Увидел тут в x.com статистику вакансий по PHP и статистику вакансий по hh.ru в целом. Я на…
  4. Sep 12, 2026Вдохновившись проектом, где делали интерактивную карту с тем, как работает Postgres (писал…
  5. Sep 8, 2026OpenAI выложили блогпост https://openai.com/index/navier-stokes-solution/ Мы публикуем реш…
  6. Sep 8, 2026Если кто не знал, вокруг этого сейчас разгорается очень большой скандал с OpenAI. Кратко,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →