Skip to content

Latest commit

ย 

History

History
ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

README.md

ๆ ‘๏ผˆTree๏ผ‰็ฎ—ๆณ•ๆฆ‚่ฟฐ

1. ไป€ไนˆๆ˜ฏๆ ‘๏ผŸ

ๆ ‘ๆ˜ฏไธ€็งๅˆ†ๅฑ‚็š„ๆ•ฐๆฎ็ป“ๆž„๏ผŒ็”ฑ่Š‚็‚นๅ’Œ่พน็ป„ๆˆ๏ผŒๅ…ทๆœ‰ไธ€ไธชๆ น่Š‚็‚นๅ’Œ่‹ฅๅนฒๅญๆ ‘ใ€‚ๆ ‘ๆ˜ฏ้ž็บฟๆ€งๆ•ฐๆฎ็ป“ๆž„๏ผŒไธŽๅ›พ็š„ๅŒบๅˆซๅœจไบŽๆ ‘ๆฒกๆœ‰็Žฏ่ทฏไธ”่ฟž้€šใ€‚ๆ ‘็ป“ๆž„ๅœจ่ฎก็ฎ—ๆœบ็ง‘ๅญฆไธญๆ— ๅค„ไธๅœจ๏ผŒๅนฟๆณ›ๅบ”็”จไบŽๆ–‡ไปถ็ณป็ปŸใ€ๆ•ฐๆฎๅบ“็ดขๅผ•ใ€็ผ–่ฏ‘ๅ™จ็ญ‰้ข†ๅŸŸใ€‚

ๆ ‘็š„็ป“ๆž„็คบๆ„๏ผš

ๆ ‘็š„ๅฑ‚ๆฌก็ป“ๆž„:

                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚  1  โ”‚ โ† ๆ น่Š‚็‚น (Root) - ็ฌฌ0ๅฑ‚
                    โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜
                       โ”‚
          โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
          โ”‚            โ”‚            โ”‚
       โ”Œโ”€โ”€โ”ดโ”€โ”€โ”      โ”Œโ”€โ”€โ”ดโ”€โ”€โ”      โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
       โ”‚  2  โ”‚      โ”‚  3  โ”‚      โ”‚  4  โ”‚ โ† ็ฌฌ1ๅฑ‚
       โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜      โ””โ”€โ”€โ”€โ”€โ”€โ”˜      โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜
          โ”‚                        โ”‚
      โ”Œโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”                โ”Œโ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”
      โ”‚       โ”‚                โ”‚       โ”‚
   โ”Œโ”€โ”€โ”ดโ”€โ”€โ”  โ”Œโ”€โ”€โ”ดโ”€โ”€โ”          โ”Œโ”€โ”€โ”ดโ”€โ”€โ”  โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
   โ”‚  5  โ”‚  โ”‚  6  โ”‚          โ”‚  7  โ”‚  โ”‚  8  โ”‚ โ† ็ฌฌ2ๅฑ‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”˜          โ””โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜
                                         โ”‚
                                      โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
                                      โ”‚  9  โ”‚ โ† ็ฌฌ3ๅฑ‚
                                      โ””โ”€โ”€โ”€โ”€โ”€โ”˜

ๆ ‘็š„ๅŸบๆœฌๆœฏ่ฏญ:
โ€ข ่Š‚็‚น: ๆ ‘ไธญ็š„ๆฏไธชๅ…ƒ็ด  (1-9)
โ€ข ่พน: ่ฟžๆŽฅ่Š‚็‚น็š„็บฟ
โ€ข ๆ น: ๆ ‘็š„้กถ้ƒจ่Š‚็‚น (1)
โ€ข ๅถๅญ: ๆฒกๆœ‰ๅญ่Š‚็‚น็š„่Š‚็‚น (3, 5, 6, 7, 9)
โ€ข ็ˆถ่Š‚็‚น: ๆœ‰ๅญ่Š‚็‚น็š„่Š‚็‚น (1ๆ˜ฏ2/3/4็š„็ˆถ่Š‚็‚น)
โ€ข ๅญ่Š‚็‚น: ็ˆถ่Š‚็‚น็š„ไธ‹ไธ€ๅฑ‚่Š‚็‚น (2/3/4ๆ˜ฏ1็š„ๅญ่Š‚็‚น)
โ€ข ๅ…„ๅผŸ่Š‚็‚น: ๅŒไธ€็ˆถ่Š‚็‚น็š„ๅญ่Š‚็‚น (2,3,4ไบ’ไธบๅ…„ๅผŸ)
โ€ข ่ทฏๅพ„: ไปŽไธ€ไธช่Š‚็‚นๅˆฐๅฆไธ€ไธช่Š‚็‚น็š„่พนๅบๅˆ—
โ€ข ๆทฑๅบฆ: ไปŽๆ นๅˆฐ่ฏฅ่Š‚็‚น็š„่พนๆ•ฐ (่Š‚็‚น5ๆทฑๅบฆ=2)
โ€ข ้ซ˜ๅบฆ: ไปŽ่ฏฅ่Š‚็‚นๅˆฐๆœ€ๆทฑๅถๅญ็š„่พนๆ•ฐ (ๆ ‘้ซ˜ๅบฆ=3)
โ€ข ๅบฆ: ่Š‚็‚น็š„ๅญ่Š‚็‚นๆ•ฐ (่Š‚็‚น1ๅบฆ=3)

2. ๆ ‘็š„ๅŸบๆœฌ็‰นๆ€ง

2.1 ๆ ‘็š„ๅˆ†็ฑป

ๆ ‘็š„ๅˆ†็ฑปไฝ“็ณป:

ๆ ‘(Tree)
โ”œโ”€โ”€ ๆŒ‰ๅญ่Š‚็‚นๆ•ฐ็›ฎ
โ”‚   โ”œโ”€โ”€ ไบŒๅ‰ๆ ‘ (Binary Tree)
โ”‚   โ”‚   โ”œโ”€โ”€ ๆ™ฎ้€šไบŒๅ‰ๆ ‘
โ”‚   โ”‚   โ”œโ”€โ”€ ๆปกไบŒๅ‰ๆ ‘ (ๆ‰€ๆœ‰ๅฑ‚้ƒฝๆปก)
โ”‚   โ”‚   โ”œโ”€โ”€ ๅฎŒๅ…จไบŒๅ‰ๆ ‘ (ๆœ€ๅŽไธ€ๅฑ‚ๅทฆๅฏน้ฝ)
โ”‚   โ”‚   โ”œโ”€โ”€ ไบŒๅ‰ๆœ็ดขๆ ‘ BST
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ๅทฆๅญๆ ‘ < ๆ น < ๅณๅญๆ ‘
โ”‚   โ”‚   โ”œโ”€โ”€ ๅนณ่กกไบŒๅ‰ๆ ‘
โ”‚   โ”‚   โ”‚   โ”œโ”€โ”€ AVLๆ ‘ (ๅทฆๅณๅญๆ ‘้ซ˜ๅบฆๅทฎโ‰ค1)
โ”‚   โ”‚   โ”‚   โ””โ”€โ”€ ็บข้ป‘ๆ ‘
โ”‚   โ”‚   โ””โ”€โ”€ ๅ † (Heap)
โ”‚   โ”‚       โ”œโ”€โ”€ ๅคง้กถๅ † (็ˆถโ‰ฅๅญ)
โ”‚   โ”‚       โ””โ”€โ”€ ๅฐ้กถๅ † (็ˆถโ‰คๅญ)
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ ๅคšๅ‰ๆ ‘ (N-ary Tree)
โ”‚       โ”œโ”€โ”€ Bๆ ‘/B+ๆ ‘ (ๆ•ฐๆฎๅบ“็ดขๅผ•)
โ”‚       โ”œโ”€โ”€ Trieๆ ‘ (ๅญ—็ฌฆไธฒๆฃ€็ดข)
โ”‚       โ””โ”€โ”€ ๅนถๆŸฅ้›† (ไธ็›ธไบค้›†ๅˆ)
โ”‚
โ”œโ”€โ”€ ๆŒ‰็”จ้€”
โ”‚   โ”œโ”€โ”€ ๆœ็ดขๆ ‘ (BST, AVL, ็บข้ป‘ๆ ‘)
โ”‚   โ”œโ”€โ”€ ไผ˜ๅ…ˆ้˜Ÿๅˆ— (ๅ †)
โ”‚   โ”œโ”€โ”€ ๅŒบ้—ดๆ ‘ (็บฟๆฎตๆ ‘)
โ”‚   โ”œโ”€โ”€ ๅญ—ๅ…ธๆ ‘ (Trie)
โ”‚   โ””โ”€โ”€ ่ฏญๆณ•ๆ ‘ (่กจ่พพๅผๆ ‘ใ€ๅ†ณ็ญ–ๆ ‘)
โ”‚
โ””โ”€โ”€ ็‰นๆฎŠๆ€ง่ดจ
    โ”œโ”€โ”€ ๅ“ˆๅคซๆ›ผๆ ‘ (ๆœ€ไผ˜ๅ‰็ผ€็ผ–็ )
    โ”œโ”€โ”€ ไผธๅฑ•ๆ ‘ (่‡ช่ฐƒๆ•ด)
    โ””โ”€โ”€  Treap (้šๆœบๅŒ–ๅนณ่กก)

2.2 ๆ ‘็š„ๅญ˜ๅ‚จ่กจ็คบ

ไบŒๅ‰ๆ ‘็š„้“พๅผๅญ˜ๅ‚จ:

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  data   โ”‚
โ”‚   10    โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  left   โ”‚โ”€โ”€โ†’ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  ๆŒ‡้’ˆ    โ”‚    โ”‚  data   โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค    โ”‚   5     โ”‚
โ”‚  right  โ”‚โ”€   โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚  ๆŒ‡้’ˆ    โ”‚ โ†’  โ”‚  left   โ”‚โ”€โ”€โ†’ NULL
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
               โ”‚  right  โ”‚โ”€โ”€โ†’ NULL
               โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅŒไบฒ่กจ็คบๆณ• (ๆ•ฐ็ป„ๅญ˜ๅ‚จ):
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ็ดขๅผ•    โ”‚  data   โ”‚  parent โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚    0    โ”‚    1    โ”‚   -1    โ”‚ (ๆ น่Š‚็‚น)
โ”‚    1    โ”‚    2    โ”‚    0    โ”‚
โ”‚    2    โ”‚    3    โ”‚    0    โ”‚
โ”‚    3    โ”‚    4    โ”‚    0    โ”‚
โ”‚    4    โ”‚    5    โ”‚    1    โ”‚
โ”‚   ...   โ”‚   ...   โ”‚   ...   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๅญฉๅญๅ…„ๅผŸ่กจ็คบๆณ• (้€‚ๅˆๅคšๅ‰ๆ ‘):
ๆฏไธช่Š‚็‚นๅญ˜ๅ‚จ: data + first_child + next_sibling

       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚  1  โ”‚ first_child โ†’ 2
       โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
         โ”‚ next_sibling
         โ†“
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚  2  โ”‚ first_child โ†’ 5
       โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
         โ”‚ next_sibling
         โ†“
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚  3  โ”‚ first_child โ†’ NULL
       โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
         โ”‚ next_sibling
         โ†“
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚  4  โ”‚
       โ””โ”€โ”€โ”€โ”€โ”€โ”˜

2.3 ๆ ‘็š„ไผ˜็ผบ็‚น

ไผ˜็‚น๏ผš

  • ๅˆ†ๅฑ‚็ป„็ป‡๏ผš่‡ช็„ถ่กจ็คบๅฑ‚ๆฌกๅ…ณ็ณป
  • ้ซ˜ๆ•ˆๆœ็ดข๏ผšๅนณ่กกๆ ‘ๆœ็ดขO(log n)
  • ๅŠจๆ€ๆ€ง๏ผšๆ˜“ไบŽๆ’ๅ…ฅๅˆ ้™ค่Š‚็‚น
  • ๆŽ’ๅบ่ƒฝๅŠ›๏ผšBSTไธญๅบ้ๅކๅณๆœ‰ๅบๅบๅˆ—

็ผบ็‚น๏ผš

  • ็ฉบ้—ดๅผ€้”€๏ผš้œ€่ฆๅญ˜ๅ‚จๅญ่Š‚็‚นๆŒ‡้’ˆ
  • ๅนณ่กก็ปดๆŠค๏ผš่‡ชๅนณ่กกๆ ‘ๅฎž็Žฐๅคๆ‚
  • ็ผ“ๅญ˜ไธๅ‹ๅฅฝ๏ผš่Š‚็‚นๅˆ†ๆ•ฃๅญ˜ๅ‚จ๏ผŒ้šๆœบ่ฎฟ้—ฎ

3. ๅธธ่ง็š„ๆ ‘็ฎ—ๆณ•

3.1 ไบŒๅ‰ๆœ็ดขๆ ‘ BST๏ผˆBinary Search Tree๏ผ‰

ๆฆ‚่ฟฐ๏ผš

  • ๅทฆๅญๆ ‘ๆ‰€ๆœ‰่Š‚็‚นๅ€ผ < ๆ น่Š‚็‚นๅ€ผ < ๅณๅญๆ ‘ๆ‰€ๆœ‰่Š‚็‚นๅ€ผ
  • ไธญๅบ้ๅކๅพ—ๅˆฐๆœ‰ๅบๅบๅˆ—
  • ๆœ็ดขใ€ๆ’ๅ…ฅใ€ๅˆ ้™คๅนณๅ‡O(log n)๏ผŒๆœ€ๅO(n)๏ผˆ้€€ๅŒ–ไธบ้“พ่กจ๏ผ‰

BSTๆ“ไฝœ็คบๆ„๏ผš

BSTๆœ็ดข่ฟ‡็จ‹ (ๆŸฅๆ‰พ 40):

       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚ 50  โ”‚
       โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
    โ†“         โ†“
  โ”Œโ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”
  โ”‚ 30โ”‚     โ”‚ 70 โ”‚
  โ””โ”€โ”€โ”ฌโ”˜     โ””โ”€โ”ฌโ”€โ”˜
     โ”‚         โ”‚
  โ”Œโ”€โ”€โ”ดโ”€โ”€โ”   โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
  โ†“     โ†“   โ†“     โ†“
โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
โ”‚ 20โ”‚ โ”‚ 40โ”‚ โ”‚ 60โ”‚ โ”‚ 80โ”‚
โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜

ๆญฅ้ชค:
1. ไปŽๆ น50ๅผ€ๅง‹๏ผŒ40 < 50๏ผŒ่ฟ›ๅ…ฅๅทฆๅญๆ ‘
2. ๆฏ”่พƒ30๏ผŒ40 > 30๏ผŒ่ฟ›ๅ…ฅๅณๅญๆ ‘
3. ๆฏ”่พƒ40๏ผŒ40 == 40 โœ“ ๆ‰พๅˆฐ!

ๆ—ถ้—ดๅคๆ‚ๅบฆ: O(h)๏ผŒhไธบๆ ‘้ซ˜ๅบฆ
ๅนณ่กกๆ—ถ h=log n๏ผŒๆœ€ๅๆ—ถ h=n

BSTๆ’ๅ…ฅ่ฟ‡็จ‹ (ๆ’ๅ…ฅ 35):
1. 50 โ†’ ๅทฆๅญๆ ‘ (30)
2. 30 โ†’ ๅณๅญๆ ‘ (40)
3. 40 โ†’ ๅทฆๅญๆ ‘ (NULL)
4. ๅœจ40็š„ๅทฆๅญๆ ‘ไฝ็ฝฎๆ’ๅ…ฅ35

       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚ 50  โ”‚
       โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
    โ†“         โ†“
  โ”Œโ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”
  โ”‚ 30โ”‚     โ”‚ 70 โ”‚
  โ””โ”€โ”€โ”ฌโ”˜     โ””โ”€โ”ฌโ”€โ”˜
     โ”‚         โ”‚
  โ”Œโ”€โ”€โ”ดโ”€โ”€โ”   โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
  โ†“     โ†“   โ†“     โ†“
โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
โ”‚ 20โ”‚ โ”‚ 40โ”‚ โ”‚ 60โ”‚ โ”‚ 80โ”‚
โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”ฌโ”€โ”˜ โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜
        โ†“
      โ”Œโ”€โ”€โ”€โ”
      โ”‚ 35โ”‚ (ๆ–ฐ่Š‚็‚น)
      โ””โ”€โ”€โ”€โ”˜

ๆ ธๅฟƒๆ€ๆƒณ๏ผš

  • ๅˆฉ็”จๆœ‰ๅบๆ€งๅฟซ้€Ÿๅฎšไฝ
  • ๅทฆๅฐๅณๅคง็š„้€’ๅฝ’็ป“ๆž„

ๅบ”็”จ๏ผš

  • ๅŠจๆ€ๆŽ’ๅบๆ•ฐๆฎ
  • ๆ•ฐๆฎๅบ“็ดขๅผ•ๅŸบ็ก€
  • ๆŸฅๆ‰พไธญไฝๆ•ฐใ€็ฌฌKๅคงๅ…ƒ็ด 

ๅฎž็Žฐ็›ฎๅฝ•๏ผšbinarytree/

3.2 ๅนณ่กกไบŒๅ‰ๆ ‘ - AVLๆ ‘

ๆฆ‚่ฟฐ๏ผš

  • BST็š„ๆ”น่ฟ›็‰ˆ๏ผŒไฟๆŒไธฅๆ ผๅนณ่กก
  • ไปปๆ„่Š‚็‚น็š„ๅทฆๅณๅญๆ ‘้ซ˜ๅบฆๅทฎ โ‰ค 1
  • ้€š่ฟ‡ๆ—‹่ฝฌๆ“ไฝœ็ปดๆŠคๅนณ่กก

AVLๅนณ่กกๅ› ๅญ็คบๆ„๏ผš

ๅนณ่กกๅ› ๅญ = ๅทฆๅญๆ ‘้ซ˜ๅบฆ - ๅณๅญๆ ‘้ซ˜ๅบฆ
ๅนณ่กกๅ› ๅญ โˆˆ {-1, 0, 1} โ†’ ๅนณ่กก
ๅนณ่กกๅ› ๅญ < -1 ๆˆ– > 1 โ†’ ไธๅนณ่กก๏ผŒ้œ€่ฆๆ—‹่ฝฌ

ๅนณ่กกๅ› ๅญ่ฎก็ฎ—:
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚ 30  โ”‚ โ† ๅนณ่กกๅ› ๅญ = 0 (ๅทฆๅณ้ซ˜ๅบฆ้ƒฝๆ˜ฏ2)
       โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
    โ†“         โ†“
  โ”Œโ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”
  โ”‚ 20โ”‚     โ”‚ 40โ”‚
  โ””โ”€โ”€โ”ฌโ”˜     โ””โ”€โ”ฌโ”€โ”˜
     โ”‚         โ”‚
  โ”Œโ”€โ”€โ”ดโ”€โ”€โ”   โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
  โ†“     โ†“   โ†“     โ†“
โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
โ”‚ 10โ”‚ โ”‚ 25โ”‚ โ”‚ 35โ”‚ โ”‚ 50โ”‚
โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜

ไธๅนณ่กกๆƒ…ๅ†ตๅŠๆ—‹่ฝฌ:

ๆƒ…ๅ†ต1: ๅทฆๅทฆไธๅนณ่กก (LL) โ†’ ๅณๆ—‹
      30              20
     /               /  \
   20      โ†’       10    30
  /                        \
10                         40

ๆƒ…ๅ†ต2: ๅณๅณไธๅนณ่กก (RR) โ†’ ๅทฆๆ—‹
  30                    40
    \                  /  \
     40      โ†’       30    50
       \
        50

ๆƒ…ๅ†ต3: ๅทฆๅณไธๅนณ่กก (LR) โ†’ ๅ…ˆๅทฆๆ—‹ๅ†ๅณๆ—‹
      30               30            25
     /                /            /  \
   20      โ†’        25    โ†’      20   30
     \            /
      25         20

ๆ—ถ้—ดๅคๆ‚ๅบฆ:
ๆœ็ดขใ€ๆ’ๅ…ฅใ€ๅˆ ้™ค้ƒฝๆ˜ฏ O(log n) - ไธฅๆ ผไฟ่ฏ!

ๆ ธๅฟƒๆ€ๆƒณ๏ผš

  • ไฟๆŒๅนณ่กกๅ› ๅญๅœจ่Œƒๅ›ดๅ†…
  • ๅ››็งๆ—‹่ฝฌๆ“ไฝœๅค„็†ไธๅนณ่กก

ๅบ”็”จ๏ผš

  • ้œ€่ฆไธฅๆ ผO(log n)ไฟ่ฏ็š„ๅœบๆ™ฏ
  • ๅ†…ๅญ˜ๆ•ฐๆฎๅบ“็ดขๅผ•
  • ๅฎžๆ—ถ็ณป็ปŸ

ๅฎž็Žฐ็›ฎๅฝ•๏ผšๅ„่ฏญ่จ€ๅฎž็Žฐๆ–‡ไปถ

3.3 ็บข้ป‘ๆ ‘๏ผˆRed-Black Tree๏ผ‰

ๆฆ‚่ฟฐ๏ผš

  • ไธ€็ง่‡ชๅนณ่กกBST๏ผŒๆฏ”AVLๆ ‘ๆ›ดๅฎฝๆพ็š„ๅนณ่กกๆกไปถ
  • ๆฏไธช่Š‚็‚นๆœ‰้ขœ่‰ฒๅฑžๆ€ง๏ผˆ็บขๆˆ–้ป‘๏ผ‰
  • ้€š่ฟ‡้ขœ่‰ฒ็บฆๆŸๅ’Œๆ—‹่ฝฌไฟๆŒ่ฟ‘ไผผๅนณ่กก
  • ๆœ€ๅ้ซ˜ๅบฆ โ‰ค 2log(n+1)

็บข้ป‘ๆ ‘ๆ€ง่ดจ็คบๆ„๏ผš

็บข้ป‘ๆ ‘็š„ไบ”ไธชๆ€ง่ดจ:
1. ๆฏไธช่Š‚็‚นๆ˜ฏ็บข่‰ฒๆˆ–้ป‘่‰ฒ
2. ๆ น่Š‚็‚นๆ˜ฏ้ป‘่‰ฒ
3. ๆ‰€ๆœ‰ๅถๅญ(NIL)ๆ˜ฏ้ป‘่‰ฒ
4. ็บข่‰ฒ่Š‚็‚น็š„ๅญ่Š‚็‚นๅฟ…้กปๆ˜ฏ้ป‘่‰ฒ
   (ไธ่ƒฝๆœ‰่ฟž็ปญ็บข่‰ฒ่Š‚็‚น)
5. ไปŽไปปไธ€่Š‚็‚นๅˆฐๅ…ถๅถๅญ็š„ๆ‰€ๆœ‰่ทฏๅพ„ๅŒ…ๅซ็›ธๅŒๆ•ฐ็›ฎ็š„้ป‘่‰ฒ่Š‚็‚น
   (้ป‘้ซ˜ๅบฆ็›ธๅŒ)

็บข้ป‘ๆ ‘็ป“ๆž„็คบไพ‹:
       โ”Œโ”€โ”€โ”€โ”€โ”€โ”
       โ”‚ 30B โ”‚ โ† ๆ น่Š‚็‚น้ป‘่‰ฒ
       โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
         โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
    โ†“         โ†“
  โ”Œโ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”
  โ”‚20Rโ”‚     โ”‚40Rโ”‚ โ† ็บข่‰ฒ่Š‚็‚น
  โ””โ”€โ”ฌโ”€โ”˜     โ””โ”€โ”ฌโ”€โ”˜
    โ”‚         โ”‚
  โ”Œโ”€โ”ดโ”€โ”     โ”Œโ”€โ”ดโ”€โ”
  โ†“   โ†“     โ†“   โ†“
โ”Œโ”€โ”€โ”€โ”โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”โ”Œโ”€โ”€โ”€โ”
โ”‚10Bโ”‚โ”‚25Bโ”‚ โ”‚35Bโ”‚โ”‚50Bโ”‚ โ† ้ป‘่‰ฒๅถๅญ
โ””โ”€โ”€โ”€โ”˜โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜โ””โ”€โ”€โ”€โ”˜

ไธบไป€ไนˆ็บข้ป‘ๆ ‘ๆฏ”AVLๆ ‘ๆ›ดๅฎž็”จ?
โ€ข AVLๆ ‘ไธฅๆ ผๅนณ่กก๏ผŒๆ’ๅ…ฅๅˆ ้™ค้œ€่ฆๆ›ดๅคšๆ—‹่ฝฌ
โ€ข ็บข้ป‘ๆ ‘ๆ’ๅ…ฅๆœ€ๅคš2ๆฌกๆ—‹่ฝฌ๏ผŒๅˆ ้™คๆœ€ๅคš3ๆฌกๆ—‹่ฝฌ
โ€ข ็บข้ป‘ๆ ‘ๆŸฅ่ฏข็•ฅๆ…ขไฝ†ๆ’ๅ…ฅๅˆ ้™คๆ›ดๅฟซ
โ€ข ๅฎž้™…ๅบ”็”จ๏ผˆๅฆ‚C++ map/setใ€Java TreeMap๏ผ‰ๅคš็”จ็บข้ป‘ๆ ‘

ๆ—ถ้—ดๅคๆ‚ๅบฆ:
ๆœ็ดขใ€ๆ’ๅ…ฅใ€ๅˆ ้™ค้ƒฝๆ˜ฏ O(log n)

ๆ ธๅฟƒๆ€ๆƒณ๏ผš

  • ็”จ้ขœ่‰ฒ็บฆๆŸไปฃๆ›ฟไธฅๆ ผ้ซ˜ๅบฆๅนณ่กก
  • ๅ‡ๅฐ‘ๆ—‹่ฝฌๆฌกๆ•ฐ๏ผŒๆ้ซ˜ๆ’ๅ…ฅๅˆ ้™คๆ•ˆ็އ

ๅบ”็”จ๏ผš

  • C++ STL map/set
  • Java TreeMap/TreeSet
  • Linuxๅ†…ๆ ธ่ฐƒๅบฆๅ™จ
  • ๆ•ฐๆฎๅบ“็ดขๅผ•

3.4 ๅ †๏ผˆHeap๏ผ‰

ๆฆ‚่ฟฐ๏ผš

  • ๅฎŒๅ…จไบŒๅ‰ๆ ‘๏ผŒๅฏ็”จๆ•ฐ็ป„้ซ˜ๆ•ˆๅญ˜ๅ‚จ
  • ๅคง้กถๅ †๏ผš็ˆถ่Š‚็‚น โ‰ฅ ๅญ่Š‚็‚น
  • ๅฐ้กถๅ †๏ผš็ˆถ่Š‚็‚น โ‰ค ๅญ่Š‚็‚น
  • ๅ †้กถๆ˜ฏๆœ€ๅคง/ๆœ€ๅฐๅ…ƒ็ด 

ๅ †็ป“ๆž„ๅ’Œๆ“ไฝœ็คบๆ„๏ผš

ๅคง้กถๅ †็ป“ๆž„:

        โ”Œโ”€โ”€โ”€โ”€โ”€โ”
        โ”‚ 100 โ”‚ โ† ๅ †้กถ๏ผŒๆœ€ๅคงๅ€ผ
        โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜
           โ”‚
      โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
      โ†“         โ†“
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”   โ”Œโ”€โ”€โ”€โ”€โ”€โ”
   โ”‚ 80  โ”‚   โ”‚ 60  โ”‚
   โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜   โ””โ”€โ”€โ”ฌโ”€โ”€โ”˜
      โ”‚         โ”‚
   โ”Œโ”€โ”€โ”ดโ”€โ”€โ”   โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
   โ†“     โ†“   โ†“     โ†“
 โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
 โ”‚50 โ”‚ โ”‚30 โ”‚ โ”‚20 โ”‚ โ”‚10 โ”‚
 โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜

ๆ•ฐ็ป„่กจ็คบ (็ดขๅผ•ไปŽ1ๅผ€ๅง‹):
็ดขๅผ•:  1    2    3    4    5    6    7
     โ”Œโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”
     โ”‚100 โ”‚ 80 โ”‚ 60 โ”‚ 50 โ”‚ 30 โ”‚ 20 โ”‚ 10โ”‚
     โ””โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”˜

่Š‚็‚นๅ…ณ็ณป:
โ€ข ็ˆถ่Š‚็‚น(i)็š„ๅทฆๅญ่Š‚็‚น = 2i
โ€ข ็ˆถ่Š‚็‚น(i)็š„ๅณๅญ่Š‚็‚น = 2i + 1
โ€ข ๅญ่Š‚็‚น(i)็š„็ˆถ่Š‚็‚น = โŒŠi/2โŒ‹

ๆ’ๅ…ฅๆ“ไฝœ (ๆ’ๅ…ฅ 90):
1. ๅฐ†90ๆ”พๅˆฐๆ•ฐ็ป„ๆœซๅฐพ
2. ไธŠๆตฎๆ“ไฝœ: ไธŽ็ˆถ่Š‚็‚นๆฏ”่พƒ๏ผŒ่‹ฅๅคงไบŽ็ˆถ่Š‚็‚นๅˆ™ไบคๆข
3. ้‡ๅค็›ดๅˆฐๆปก่ถณๅ †ๆ€ง่ดจ

      100                    100
     /   \       ๆ’ๅ…ฅ90      /   \
   80     60      โ†’       90     60
  / \    /               /  \    /
50  30 20              80  30  20
                       /
                      50
                      ไบคๆข90ๅ’Œ80ๅŽ โ†’
                      
      100                100
     /   \               /   \
   90     60            90     60
  / \    /             / \    /
80  30 20             80 30  20
/                     /
50                    50
                      ๆ— ้œ€ๅ†ไบคๆข๏ผŒๅฎŒๆˆ!

ๅˆ ้™คๅ †้กถ:
1. ๅฐ†ๅ †้กถไธŽๆœ€ๅŽไธ€ไธชๅ…ƒ็ด ไบคๆข
2. ็งป้™คๆœ€ๅŽไธ€ไธชๅ…ƒ็ด ๏ผˆๅŽŸๅ †้กถ๏ผ‰
3. ไธ‹ๆฒ‰ๆ“ไฝœ: ไธŽๅญ่Š‚็‚นไธญ่พƒๅคง่€…ไบคๆข
4. ้‡ๅค็›ดๅˆฐๆปก่ถณๅ †ๆ€ง่ดจ

ๆ—ถ้—ดๅคๆ‚ๅบฆ:
โ€ข ๅปบๅ †: O(n)
โ€ข ๆ’ๅ…ฅ: O(log n)
โ€ข ๅˆ ้™คๅ †้กถ: O(log n)
โ€ข ๆŸฅ่ฏขๅ †้กถ: O(1)

ๆ ธๅฟƒๆ€ๆƒณ๏ผš

  • ๅฎŒๅ…จไบŒๅ‰ๆ ‘ไฟ่ฏๆ•ฐ็ป„ๅญ˜ๅ‚จ้ซ˜ๆ•ˆ
  • ๅ †ๆ€ง่ดจไฟ่ฏๅ †้กถๆ˜ฏๆœ€ๅ€ผ
  • ไธŠๆตฎ/ไธ‹ๆฒ‰ๆ“ไฝœ็ปดๆŠคๅ †ๆ€ง่ดจ

ๅบ”็”จ๏ผš

  • ไผ˜ๅ…ˆ้˜Ÿๅˆ—
  • ๅ †ๆŽ’ๅบ
  • Top K้—ฎ้ข˜
  • ๅˆๅนถKไธชๆœ‰ๅบๅˆ—่กจ

ๅฎž็Žฐ็›ฎๅฝ•๏ผšbinarytree/ ๆˆ–็›ธๅ…ณ็›ฎๅฝ•

3.5 Bๆ ‘/B+ๆ ‘

ๆฆ‚่ฟฐ๏ผš

  • ๅคš่ทฏๆœ็ดขๆ ‘๏ผŒๆฏไธช่Š‚็‚นๅฏไปฅๆœ‰ๅคšไธชๅญ่Š‚็‚น
  • ๆ‰€ๆœ‰ๅถๅญ่Š‚็‚นๅœจๅŒไธ€ๅฑ‚
  • B+ๆ ‘็š„้žๅถๅญ่Š‚็‚นๅชๅญ˜้”ฎ๏ผŒๆ•ฐๆฎ้ƒฝๅœจๅถๅญ
  • ๅถๅญ่Š‚็‚น้“พ่กจ่ฟžๆŽฅ๏ผŒๆ”ฏๆŒ่Œƒๅ›ดๆŸฅ่ฏข

B+ๆ ‘็ป“ๆž„็คบๆ„๏ผš

B+ๆ ‘็ป“ๆž„ (้˜ถๆ•ฐm=3):

                โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                โ”‚     20     50   โ”‚
                โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                         โ”‚
         โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
         โ”‚               โ”‚               โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
    โ”‚ 10   15 โ”‚     โ”‚ 30   40 โ”‚     โ”‚ 60   70 โ”‚
    โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜     โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”˜
         โ”‚               โ”‚               โ”‚
    โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
    โ†“         โ†“     โ†“         โ†“     โ†“         โ†“
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚5โ”‚8โ”‚10 โ”‚โ†’โ”‚12โ”‚15 โ”‚โ†’โ”‚20โ”‚25 โ”‚โ†’โ”‚30โ”‚35 โ”‚โ†’โ”‚40โ”‚45 โ”‚โ†’โ”‚50โ”‚55 โ”‚โ†’โ”‚60โ”‚65 โ”‚โ†’โ”‚70โ”‚75 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 ๆ•ฐๆฎ้กต    ๆ•ฐๆฎ้กต    ๆ•ฐๆฎ้กต    ๆ•ฐๆฎ้กต    ๆ•ฐๆฎ้กต    ๆ•ฐๆฎ้กต    ๆ•ฐๆฎ้กต
 
็‰น็‚น:
โ€ข ้žๅถๅญ่Š‚็‚นๅญ˜้”ฎๅ€ผ๏ผŒไธๅญ˜ๆ•ฐๆฎ
โ€ข ๅถๅญ่Š‚็‚นๅญ˜ๅฎž้™…ๆ•ฐๆฎ๏ผŒไธ”ๆœ‰ๅบ่ฟžๆŽฅ
โ€ข ๆŸฅ่ฏขๆ•ˆ็އ็จณๅฎš: O(log n)
โ€ข ้žๅธธ้€‚ๅˆ็ฃ็›˜ๅญ˜ๅ‚จ๏ผˆๅ‡ๅฐ‘I/O๏ผ‰

ๆŸฅๆ‰พ 35:
1. ๆ น่Š‚็‚น: 20 < 35 < 50 โ†’ ่ตฐไธญ้—ดๅˆ†ๆ”ฏ
2. ไธญ้—ด่Š‚็‚น: 30 < 35 < 40 โ†’ ่ตฐไธญ้—ดๅˆ†ๆ”ฏ
3. ๅถๅญ่Š‚็‚น: ๆ‰พๅˆฐ35

่Œƒๅ›ดๆŸฅ่ฏข 15-45:
1. ๆ‰พๅˆฐ15ๆ‰€ๅœจ็š„ๅถๅญ
2. ้กบ็€ๅถๅญ้“พ่กจ้ๅކ็›ดๅˆฐ่ถ…่ฟ‡45
3. ่ฟ”ๅ›ž15, 20, 25, 30, 35, 40

ๆ ธๅฟƒๆ€ๆƒณ๏ผš

  • ๅคš่ทฏๆ ‘ๅ‡ๅฐ‘็ฃ็›˜I/O
  • ๅถๅญ้“พ่กจๆ”ฏๆŒ้ซ˜ๆ•ˆ่Œƒๅ›ดๆŸฅ่ฏข
  • ไฟๆŒๅนณ่กก๏ผŒๆ‰€ๆœ‰ๅถๅญๅŒๅฑ‚

ๅบ”็”จ๏ผš

  • ๆ•ฐๆฎๅบ“็ดขๅผ•๏ผˆMySQL InnoDB๏ผ‰
  • ๆ–‡ไปถ็ณป็ปŸ
  • ็ฃ็›˜ๅญ˜ๅ‚จไผ˜ๅŒ–

4. ๆ ‘้ๅކ็ฎ—ๆณ•

4.1 ๆทฑๅบฆไผ˜ๅ…ˆ้ๅކ (DFS)

ไบŒๅ‰ๆ ‘็š„ไธ‰็งDFS้ๅކ:

      โ”Œโ”€โ”€โ”€โ”€โ”€โ”
      โ”‚  F  โ”‚
      โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
        โ”‚
   โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
   โ†“         โ†“
 โ”Œโ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”
 โ”‚ B โ”‚     โ”‚ G โ”‚
 โ””โ”€โ”ฌโ”€โ”˜     โ””โ”€โ”€โ”€โ”˜
   โ”‚
โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
โ†“     โ†“
โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
โ”‚ A โ”‚ โ”‚ D โ”‚
โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”ฌโ”€โ”˜
        โ”‚
     โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
     โ†“     โ†“
   โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
   โ”‚ C โ”‚ โ”‚ E โ”‚
   โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜

ๅ‰ๅบ้ๅކ (ๆ นโ†’ๅทฆโ†’ๅณ): F, B, A, D, C, E, G
ไธญๅบ้ๅކ (ๅทฆโ†’ๆ นโ†’ๅณ): A, B, C, D, E, F, G
ๅŽๅบ้ๅކ (ๅทฆโ†’ๅณโ†’ๆ น): A, C, E, D, B, G, F

้ๅކ็š„ๅบ”็”จ:
โ€ข ๅ‰ๅบ: ๅคๅˆถๆ ‘ใ€ๅบๅˆ—ๅŒ–
โ€ข ไธญๅบ: BSTไธญๅพ—ๅˆฐๆœ‰ๅบๅบๅˆ—
โ€ข ๅŽๅบ: ๅˆ ้™คๆ ‘ใ€่ฎก็ฎ—็›ฎๅฝ•ๅคงๅฐ

4.2 ๅนฟๅบฆไผ˜ๅ…ˆ้ๅކ (BFS/ๅฑ‚ๅบ้ๅކ)

ๅฑ‚ๅบ้ๅކ (ไฝฟ็”จ้˜Ÿๅˆ—):

      โ”Œโ”€โ”€โ”€โ”€โ”€โ”         ้˜Ÿๅˆ—: [F]           ็ป“ๆžœ: []
      โ”‚  F  โ”‚
      โ””โ”€โ”ฌโ”€โ”€โ”€โ”˜
        โ”‚
   โ”Œโ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”
   โ†“         โ†“
 โ”Œโ”€โ”€โ”€โ”     โ”Œโ”€โ”€โ”€โ”
 โ”‚ B โ”‚     โ”‚ G โ”‚
 โ””โ”€โ”ฌโ”€โ”˜     โ””โ”€โ”€โ”€โ”˜
   โ”‚
โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
โ†“     โ†“
โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
โ”‚ A โ”‚ โ”‚ D โ”‚
โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”ฌโ”€โ”˜
        โ”‚
     โ”Œโ”€โ”€โ”ดโ”€โ”€โ”
     โ†“     โ†“
   โ”Œโ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”
   โ”‚ C โ”‚ โ”‚ E โ”‚
   โ””โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”˜

่ฟ‡็จ‹:
1. ้˜Ÿๅˆ—: [F]      ๅ‡บ้˜ŸF๏ผŒๅ…ฅ้˜ŸB,G โ†’ ้˜Ÿๅˆ—: [B,G]     ็ป“ๆžœ: [F]
2. ้˜Ÿๅˆ—: [B,G]    ๅ‡บ้˜ŸB๏ผŒๅ…ฅ้˜ŸA,D โ†’ ้˜Ÿๅˆ—: [G,A,D]   ็ป“ๆžœ: [F,B]
3. ้˜Ÿๅˆ—: [G,A,D]  ๅ‡บ้˜ŸG๏ผŒๆ— ๅญ่Š‚็‚น โ†’ ้˜Ÿๅˆ—: [A,D]     ็ป“ๆžœ: [F,B,G]
4. ้˜Ÿๅˆ—: [A,D]    ๅ‡บ้˜ŸA๏ผŒๆ— ๅญ่Š‚็‚น โ†’ ้˜Ÿๅˆ—: [D]       ็ป“ๆžœ: [F,B,G,A]
5. ้˜Ÿๅˆ—: [D]      ๅ‡บ้˜ŸD๏ผŒๅ…ฅ้˜ŸC,E โ†’ ้˜Ÿๅˆ—: [C,E]     ็ป“ๆžœ: [F,B,G,A,D]
6. ้˜Ÿๅˆ—: [C,E]    ๅ‡บ้˜ŸC๏ผŒๆ— ๅญ่Š‚็‚น โ†’ ้˜Ÿๅˆ—: [E]       ็ป“ๆžœ: [F,B,G,A,D,C]
7. ้˜Ÿๅˆ—: [E]      ๅ‡บ้˜ŸE๏ผŒๆ— ๅญ่Š‚็‚น โ†’ ้˜Ÿๅˆ—: []        ็ป“ๆžœ: [F,B,G,A,D,C,E]

ๆœ€็ปˆ็ป“ๆžœ: F, B, G, A, D, C, E

ๅบ”็”จ:
โ€ข ๆŸฅๆ‰พๆœ€็Ÿญ่ทฏๅพ„๏ผˆๆ— ๆƒๆ ‘๏ผ‰
โ€ข ๆŒ‰ๅฑ‚ๆ‰“ๅฐๆ ‘
โ€ข ๆŸฅๆ‰พๆŸๅฑ‚็š„ๆ‰€ๆœ‰่Š‚็‚น

5. ๅ…ธๅž‹ๅบ”็”จๅœบๆ™ฏ

5.1 ้€‰ๆ‹ฉๆ ‘็ป“ๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ ๅœบๆ™ฏ                           โ”‚ ๆŽจ่ๆ ‘็ป“ๆž„              โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ ้œ€่ฆๅŠจๆ€ๆŽ’ๅบ                    โ”‚ BST/็บข้ป‘ๆ ‘             โ”‚
โ”‚ ้œ€่ฆไธฅๆ ผO(log n)ไฟ่ฏ            โ”‚ AVLๆ ‘                 โ”‚
โ”‚ ้ข‘็นๆ’ๅ…ฅๅˆ ้™ค๏ผŒๅถๅฐ”ๆŸฅ่ฏข            โ”‚ ็บข้ป‘ๆ ‘                 โ”‚
โ”‚ ้œ€่ฆไผ˜ๅ…ˆ้˜Ÿๅˆ—                    โ”‚ ๅ †                    โ”‚
โ”‚ ๆ•ฐๆฎๅบ“็ดขๅผ•                      โ”‚ B+ๆ ‘                  โ”‚
โ”‚ ๅ‰็ผ€ๅŒน้…๏ผˆ่‡ชๅŠจ่กฅๅ…จ๏ผ‰              โ”‚ Trieๆ ‘               โ”‚
โ”‚ ๅŒบ้—ดๆŸฅ่ฏข                        โ”‚ ็บฟๆฎตๆ ‘                โ”‚
โ”‚ ไธ็›ธไบค้›†ๅˆๅˆๅนถ                   โ”‚ ๅนถๆŸฅ้›†                โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

5.2 ๅฎž้™…็ณป็ปŸๅบ”็”จ

  • ๆ–‡ไปถ็ณป็ปŸ๏ผš็›ฎๅฝ•ๆ ‘็ป“ๆž„
  • DOMๆ ‘๏ผšHTML/XMLๆ–‡ๆกฃ่งฃๆž
  • ่ฏญๆณ•ๅˆ†ๆž๏ผš็ผ–่ฏ‘ๅ™จ็š„่ฏญๆณ•ๆ ‘
  • ๅ†ณ็ญ–็ณป็ปŸ๏ผšๅ†ณ็ญ–ๆ ‘๏ผˆๆœบๅ™จๅญฆไน ๏ผ‰
  • ็‰ˆๆœฌๆŽงๅˆถ๏ผšGit็š„ๆไบคๆ ‘/Merkleๆ ‘

6. ๆ€ง่ƒฝ็‰น็‚น

6.1 ๆ—ถ้—ดๅคๆ‚ๅบฆๅฏนๆฏ”

ๆ“ไฝœ BST(ๅนณๅ‡) BST(ๆœ€ๅ) AVL ็บข้ป‘ๆ ‘ ๅ †
ๆœ็ดข O(log n) O(n) O(log n) O(log n) O(n)
ๆ’ๅ…ฅ O(log n) O(n) O(log n) O(log n) O(log n)
ๅˆ ้™ค O(log n) O(n) O(log n) O(log n) O(log n)
ๆœ€ๅ€ผ O(log n) O(n) O(log n) O(log n) O(1)

6.2 ็ฉบ้—ดๅคๆ‚ๅบฆ

  • ๆ‰€ๆœ‰ๆ ‘็ป“ๆž„๏ผšO(n)
  • ๆฏไธช่Š‚็‚น้ขๅค–ๅผ€้”€๏ผšๅญ่Š‚็‚นๆŒ‡้’ˆ + ๅนณ่กกไฟกๆฏ

7. ็ผ–็จ‹่ฏญ่จ€ๆ”ฏๆŒ

  • C๏ผšๆ‰‹ๅŠจๅฎž็Žฐ๏ผŒ็†่งฃๅŽŸ็†
  • Java๏ผšTreeMap/TreeSet๏ผˆ็บข้ป‘ๆ ‘๏ผ‰๏ผŒPriorityQueue๏ผˆๅ †๏ผ‰
  • Go๏ผšๆ— ๆ ‡ๅ‡†ๆ ‘ๅฎž็Žฐ๏ผŒ้œ€่‡ช่กŒๅฎž็Žฐๆˆ–ไฝฟ็”จ็ฌฌไธ‰ๆ–นๅบ“
  • JavaScript๏ผšๆ— ๆ ‡ๅ‡†ๆ ‘ๅฎž็Žฐ
  • Python๏ผšๆ— ๆ ‡ๅ‡†BSTๅฎž็Žฐ๏ผŒheapqๆจกๅ—๏ผˆๅ †๏ผ‰
  • Rust๏ผšBTreeMap/BTreeSet๏ผˆBๆ ‘๏ผ‰๏ผŒBinaryHeap

8. ๅญฆไน ๅปบ่ฎฎ

8.1 ๅญฆไน ่ทฏๅพ„

  1. ไบŒๅ‰ๆ ‘ๅŸบ็ก€๏ผš็†่งฃๆ ‘็š„ๅŸบๆœฌๆฆ‚ๅฟตๅ’Œ้ๅކ
  2. ไบŒๅ‰ๆœ็ดขๆ ‘๏ผšๆŽŒๆกBST็š„ๆœ็ดขใ€ๆ’ๅ…ฅใ€ๅˆ ้™ค
  3. ๅนณ่กกๆ ‘๏ผš็†่งฃไธบไป€ไนˆ้œ€่ฆๅนณ่กก๏ผŒๅญฆไน AVLๆˆ–็บข้ป‘ๆ ‘
  4. ๅ †๏ผš็†่งฃๅ †็š„ๆ€ง่ดจๅ’Œๅบ”็”จ
  5. ้ซ˜็บงๆ ‘๏ผšBๆ ‘ใ€Trieใ€็บฟๆฎตๆ ‘

8.2 ๅฎž่ทต่ฆ็‚น

  • ่ƒฝๆ‰‹ๅ†™ไบŒๅ‰ๆ ‘็š„ไธ‰็งDFS้ๅކ
  • ่ƒฝๆ‰‹ๅ†™BST็š„ๆ’ๅ…ฅๅ’Œๅˆ ้™ค
  • ็†่งฃ่‡ชๅนณ่กกๆ ‘็š„ๆ—‹่ฝฌๆ“ไฝœ
  • ๆŽŒๆกๅ †็š„ไธŠๆตฎ/ไธ‹ๆฒ‰ๆ“ไฝœ
  • ๅญฆไผšๆ นๆฎๅœบๆ™ฏ้€‰ๆ‹ฉๅˆ้€‚็š„ๆ ‘็ป“ๆž„