Найти Π² Π”Π·Π΅Π½Π΅
АлСксСй Никитин

🌳 Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска (BST) β€” ΠΊΠ»Π°Π΄Ρ‘ΠΌ числа Β«ΠΊΠ°ΠΊ Π² ΠΎΠ³ΠΎΡ€ΠΎΠ΄Π΅

πŸŒ³Β Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска (BST)Β β€” ΠΊΠ»Π°Π΄Ρ‘ΠΌ числа Β«ΠΊΠ°ΠΊ Π² ΠΎΠ³ΠΎΡ€ΠΎΠ΄Π΅Β» Бадовник‑самурай сортируСт Π±Π°ΠΌΠ±ΡƒΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠ°Π»ΠΊΠΈ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅. Он Π²Ρ‚Ρ‹ΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠ°Π»ΠΊΡƒ Π² зСмлю β€” это Ρ†Π΅Π½Ρ‚Ρ€ грядки. Π›ΡŽΠ±Π°Ρ ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈΠ΄Ρ‘Ρ‚ Π²Π»Π΅Π²ΠΎ, Π΄Π»ΠΈΠ½Π½Π΅Π΅ β€” Π²ΠΏΡ€Π°Π²ΠΎ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π»ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ повторяСтся: слСва ΠΊΠΎΡ€ΠΎΡ‡Π΅, справа Π΄Π»ΠΈΠ½Π½Π΅Π΅. Π§Π΅Ρ€Π΅Π· ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ «Тивая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Β», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ. Π’ΠΎΡ‚ это ΠΈ Π΅ΡΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска. Как ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΠ°Π»ΡŒΡ†Π°Ρ… 1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт — Β«ΠΊΠΎΡ€Π΅Π½ΡŒΒ». 2. Всё, Ρ‡Ρ‚ΠΎ мСньшС, ΠΊΠ»Π°Π΄Ρ‘ΠΌ слСва; большС β€” справа. 3. Для любой Β«Π²Π΅Ρ‚ΠΊΠΈΒ» ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС. Π’Π°ΠΊ грядка растёт Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, Π° Π½Π΅ Π² ΠΎΠ΄Π½Ρƒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ поиск Β«Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΏΠ°Π»ΠΊΠ° 42 см?Β» Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² срСднСм logβ‚‚(n) шагов, Π° Π½Π΅ n, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ простом ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅. ΠœΠΈΠ½ΠΈβ€‘Π³Π»ΠΎΡΡΠ°Ρ€ΠΈΠΉ β€’ ΠšΠΎΡ€Π΅Π½ΡŒ β€” пСрвая ΠΏΠ°Π»ΠΊΠ°. β€’ Π’Π΅Ρ‚Π²ΡŒ/ΡƒΠ·Π΅Π» β€” любая ΠΏΠ°Π»ΠΊΠ° с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ Β«Π΄Π΅Ρ‚ΡŒΠΌΠΈΒ» слСва/справа. β€’ Лист β€” ΠΏΠ°Π»ΠΊΠ° Π±Π΅Π· Π΄Π΅Ρ‚Π΅ΠΉ. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π½Π° PHP // вставка Π² BST function insert(?array &$tree, int $value): void { if ($tree === null) { // пустоС мСсто

πŸŒ³Β Π‘ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска (BST)Β β€” ΠΊΠ»Π°Π΄Ρ‘ΠΌ числа Β«ΠΊΠ°ΠΊ Π² ΠΎΠ³ΠΎΡ€ΠΎΠ΄Π΅Β»

Бадовник‑самурай сортируСт Π±Π°ΠΌΠ±ΡƒΠΊΠΎΠ²Ρ‹Π΅ ΠΏΠ°Π»ΠΊΠΈ ΠΏΠΎ Π΄Π»ΠΈΠ½Π΅. Он Π²Ρ‚Ρ‹ΠΊΠ°Π΅Ρ‚ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠ°Π»ΠΊΡƒ Π² зСмлю β€” это Ρ†Π΅Π½Ρ‚Ρ€ грядки. Π›ΡŽΠ±Π°Ρ ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΈΠ΄Ρ‘Ρ‚ Π²Π»Π΅Π²ΠΎ, Π΄Π»ΠΈΠ½Π½Π΅Π΅ β€” Π²ΠΏΡ€Π°Π²ΠΎ. Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π½ΠΎΠ²ΠΎΠΉ ΠΏΠ°Π»ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ повторяСтся: слСва ΠΊΠΎΡ€ΠΎΡ‡Π΅, справа Π΄Π»ΠΈΠ½Π½Π΅Π΅. Π§Π΅Ρ€Π΅Π· ΠΌΠΈΠ½ΡƒΡ‚Ρƒ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°ΡΡŒ «Тивая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ°Β», Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½ΡƒΠΆΠ½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ Π»Π΅Π³ΠΊΠΎ Π½Π°ΠΉΡ‚ΠΈ. Π’ΠΎΡ‚ это ΠΈ Π΅ΡΡ‚ΡŒ Π±ΠΈΠ½Π°Ρ€Π½ΠΎΠ΅ Π΄Π΅Ρ€Π΅Π²ΠΎ поиска.

Как ΠΎΠ½ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π½Π° ΠΏΠ°Π»ΡŒΡ†Π°Ρ…

1. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ элСмСнт — Β«ΠΊΠΎΡ€Π΅Π½ΡŒΒ».

2. Всё, Ρ‡Ρ‚ΠΎ мСньшС, ΠΊΠ»Π°Π΄Ρ‘ΠΌ слСва; большС β€” справа.

3. Для любой Β«Π²Π΅Ρ‚ΠΊΠΈΒ» ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Ρ‚ΠΎ ΠΆΠ΅ самоС.

Π’Π°ΠΊ грядка растёт Π² ΡˆΠΈΡ€ΠΈΠ½Ρƒ ΠΈ Π³Π»ΡƒΠ±ΠΈΠ½Ρƒ, Π° Π½Π΅ Π² ΠΎΠ΄Π½Ρƒ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ Ρ†Π΅ΠΏΠΎΡ‡ΠΊΡƒ. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ поиск Β«Π΅ΡΡ‚ΡŒ Π»ΠΈ ΠΏΠ°Π»ΠΊΠ° 42 см?Β» Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π² срСднСм logβ‚‚(n) шагов, Π° Π½Π΅ n, ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ простом ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π΅.

ΠœΠΈΠ½ΠΈβ€‘Π³Π»ΠΎΡΡΠ°Ρ€ΠΈΠΉ

β€’ ΠšΠΎΡ€Π΅Π½ΡŒ β€” пСрвая ΠΏΠ°Π»ΠΊΠ°.

β€’ Π’Π΅Ρ‚Π²ΡŒ/ΡƒΠ·Π΅Π» β€” любая ΠΏΠ°Π»ΠΊΠ° с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌΠΈ Β«Π΄Π΅Ρ‚ΡŒΠΌΠΈΒ» слСва/справа.

β€’ Лист β€” ΠΏΠ°Π»ΠΊΠ° Π±Π΅Π· Π΄Π΅Ρ‚Π΅ΠΉ.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° Π½Π° PHP

// вставка Π² BST

function insert(?array &$tree, int $value): void {

if ($tree === null) { // пустоС мСсто β€” саТаСм ΠΏΠ°Π»ΠΊΡƒ

$tree = ['v'=>$value,'l'=>null,'r'=>null];

return;

}

$branch = ($value < $tree['v']) ? 'l' : 'r';

insert($tree[$branch], $value); // рСкурсивно дальшС

}

ИдСя Ρ‚Π° ΠΆΠ΅ для поиска: ΠΈΠ΄Ρ‘ΠΌ Π²Π»Π΅Π²ΠΎ ΠΈΠ»ΠΈ Π²ΠΏΡ€Π°Π²ΠΎ, ΠΏΠΎΠΊΠ° Π½Π΅ Π½Π°ΠΉΠ΄Ρ‘ΠΌ ΠΈΠ»ΠΈ Π½Π΅ упрСмся Π² пустоту.

ΠŸΠ»ΡŽΡΡ‹

β€’ Быстрый поиск/вставка ΠΏΡ€ΠΈ Β«Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΌΒ» Π΄Π΅Ρ€Π΅Π²Π΅ β€” O(logβ€―n).

β€’ Π”Π°Π½Π½Ρ‹Π΅ автоматичСски дСрТатся упорядочСнно.

ΠœΠΈΠ½ΡƒΡΡ‹

β€’ Если Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ ΡƒΠΆΠ΅ отсортированныС Π΄Π°Π½Π½Ρ‹Π΅, Π΄Π΅Ρ€Π΅Π²ΠΎ пСрСкосится ΠΈ станСт ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ (O(n)).

β€’ НуТно ΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π·Π° балансировкой ΠΈΠ»ΠΈ Π±Ρ€Π°Ρ‚ΡŒ Π³ΠΎΡ‚ΠΎΠ²Ρ‹Π΅ Β«ΡΠ°ΠΌΠΎΠ±Π°Π»Π°Π½ΡΠΈΡ€ΡƒΡŽΡ‰ΠΈΠ΅ΡΡΒ» Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ (AVL, Red‑Black).

Когда Π±Ρ€Π°Ρ‚ΡŒ BST

βœ… НуТно Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ ΠΈΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎ числовому ΠΊΠ»ΡŽΡ‡Ρƒ.

βœ… Π₯ΠΎΡ‚ΠΈΡ‚Π΅ быстро Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΠΎ Π²ΠΎΠ·Ρ€Π°ΡΡ‚Π°Π½ΠΈΡŽ.

🚫 ΠŸΡ€ΠΈΡ…ΠΎΠ΄ΡΡ‚ Π΄Π°Π½Π½Ρ‹Π΅ ΡƒΠΆΠ΅ отсортированныС β€” Π»ΡƒΡ‡ΡˆΠ΅ Ρ…Π΅Ρˆβ€‘Ρ‚Π°Π±Π»ΠΈΡ†Π° ΠΈΠ»ΠΈ сбалансированноС Π΄Π΅Ρ€Π΅Π²ΠΎ.

Вопрос ΠΊ читатСлям: встрСчали Π»ΠΈ Π²Ρ‹ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ, ΠΊΠΎΠ³Π΄Π° поиск Β«Π±ΠΈΠ½Π°Ρ€ΠΊΠΎΠΉΒ» спас ΠΏΡ€ΠΎΠ΅ΠΊΡ‚? РасскаТитС Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ…!

#Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹Β #BSTΒ #кодБамурая