TGViewer
Dev Math Dev Math @easy_dev_math · 619 subscribers
Post #6 304
⚡ Много предметов в луте? Замени цикл на бинарный поиск

Линейный поиск — O(n). На 10 000+ предметов уже заметно тормозит. Бинарный — O(log n), и на больших таблицах разница становится огромной.

Один раз считаем в Start():


int[] cumulative = new int[weights.Length];
cumulative[0] = weights[0];
for (int i = 1; i < weights.Length; i++)
cumulative[i] = cumulative[i - 1] + weights[i];


При каждом дропе — только поиск:


int roll = Random.Range(0, cumulative[^1] + 1);
int idx = System.Array.BinarySearch(cumulative, roll);
if (idx < 0) idx = ~idx;


~ — оператор побитового НЕ. BinarySearch возвращает отрицательное число, если точного совпадения нет — это ~insertionPoint, где insertionPoint — индекс, куда вставилось бы значение. ~idx обращает это обратно и даёт первый элемент, который больше нашего броска. Именно он нам и нужен.

На 5 предметах разницы нет. На 10 000 — ощутимо.

Главное правило: кэшируй массив при старте, не пересчитывай каждый раз.

#мат_геймдев #БыстрыйМат #рандом #оптимизация
  • 🔥 5
  • ❤ 1
More from @easy_dev_math
  1. Sep 29, 2026💡 Как сделать классный туториал Как мы уже обсудили. Туториал штука довольна важная в люб…
  2. Sep 28, 2026🤔 Как проверить свою идею? Сделал небольшое видео о том, как проверить свою идею. Самый п…
  3. Sep 28, 2026🤔 Почему так важен онбординг в игре? По следам разбора давайте на этой неделе разберем те…
  4. Sep 26, 2026🤨 Разбор игры — «Алхимик: магазин волшебных зелий» https://yandex.ru/games/#app=582380 Чт…
  5. Sep 25, 2026🥴 Кина не будет (сегодня) У меня техническая накладка. Форсмажор. Поэтому прошу понять и…
  6. Sep 24, 2026😁 Почему игроки фармят пиксели https://dev-math.ru/articles/grind/ Дописал статью про воп…
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 →