Skip to content

perf: O(N*M) -> O(N log N) combat initiative loop (#3106)#3107

Merged
bylins merged 1 commit intomasterfrom
fix/combat-sort-initiative
Apr 7, 2026
Merged

perf: O(N*M) -> O(N log N) combat initiative loop (#3106)#3107
bylins merged 1 commit intomasterfrom
fix/combat-sort-initiative

Conversation

@bylins
Copy link
Copy Markdown
Owner

@bylins bylins commented Apr 6, 2026

Summary

Round check в perform_violence занимал 95% времени (130-189ms при пульсе 40ms).

Причина: двойной цикл for (initiative = max..min) × for (combat_list) = O(N×M), где M = до 201 (диапазон инициатив -100..100).

Фикс: combat_list.sort() по убыванию инициативы + один проход = O(N log N + N).

Test plan

  • Порядок атак по инициативе сохранён
  • Замерить Round check после фикса
  • Проверить что initiative <= 0 корректно пропускается

🤖 Generated with Claude Code

@bylins bylins force-pushed the fix/combat-sort-initiative branch from e0219de to 2ed98dc Compare April 6, 2026 17:13
Двойной цикл initiative(max..min) × combat_list заменён на
std::list::sort по инициативе + один проход по списку.

Было: до 201 прохода по combat_list (инициативы от -100 до 100).
Стало: одна сортировка O(N log N) + один проход O(N).

Round check занимал 95% времени perform_violence (130-189ms).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@bylins bylins force-pushed the fix/combat-sort-initiative branch from 2ed98dc to 7127e2c Compare April 6, 2026 17:24
@bylins bylins merged commit cdd0d62 into master Apr 7, 2026
20 checks passed
@bylins bylins deleted the fix/combat-sort-initiative branch April 7, 2026 05:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant