เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

Hey Habr! เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบ™เปเบฒโ€‹เบชเบฐโ€‹เป€เบซเบ™เบตโ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบปเบ™โ€‹เปƒเบˆโ€‹เบเบฒเบ™โ€‹เปเบ›โ€‹เบžเบฒโ€‹เบชเบฒโ€‹เบ‚เบญเบ‡โ€‹เบšเบปเบ”โ€‹เบ„เบงเบฒเบกโ€‹เป„เบ”เป‰โ€‹
"เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เป€เบฎเบฑเบ”เบงเบฝเบเปเบ™เบงเปƒเบ”".

เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบกเบฑเบ™เบกเบฒเบเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป„เบ”เป‰เปเบ•เปˆเบ„เบดเบ”เบงเปˆเบฒเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบซเบฒเบเป„เบ›. เบžเบงเบเบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบขเบนเปˆเบ—เบปเปˆเบงเบ—เบธเบเปเบซเปˆเบ‡. เบกเบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบซเบผเบฒเบเบ—เบตเปˆเบกเบตเบขเบนเปˆ, เบˆเบฒเบ SQLite เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเปเบฅเบฐเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เป€เบ–เบดเบ‡ Teradata เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš. เปเบ•เปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆเบšเบปเบ”เบ„เบงเบฒเบกเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ„เบปเป‰เบ™เบซเบฒเบ•เบปเบงเป€เบญเบ‡เป‚เบ”เบเปƒเบŠเป‰ "howdoesarelationaldatabasework" เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบตเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบซเบผเบฒเบเบ›เบฒเบ™เปƒเบ”. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบšเบปเบ”เบ„เบงเบฒเบกเป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบชเบฑเป‰เบ™. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเป€เบ—เบเป‚เบ™เป‚เบฅเบเบต buzzy เบซเบฅเป‰เบฒเบชเบธเบ” (BigData, NoSQL เบซเบผเบท JavaScript), เบ—เปˆเบฒเบ™เบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเป€เบฅเบดเบเป€เบŠเบดเปˆเบ‡เบญเบฐเบ—เบดเบšเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบ.

เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เปเบกเปˆเบ™เป€เบเบปเปˆเบฒเป€เบเบตเบ™เป„เบ›เปเบฅเบฐเบซเบ™เป‰เบฒเป€เบšเบทเปˆเบญเป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบขเบนเปˆเบ™เบญเบเบซเบผเบฑเบเบชเบนเบ”เบงเบดเบ—เบฐเบเบฒเป„เบฅ, เป€เบญเบเบฐเบชเบฒเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเปเบฅเบฐเบซเบ™เบฑเบ‡เบชเบท?

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เปƒเบ™เบ–เบฒเบ™เบฐเป€เบ›เบฑเบ™เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ, เบ‚เป‰เบญเบเบเบฝเบ”เบŠเบฑเบ‡เบเบฒเบ™เปƒเบŠเป‰เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆ. เปเบฅเบฐเบ–เป‰เบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เบซเบผเบฒเบเบเบงเปˆเบฒ 40 เบ›เบต, เบ•เป‰เบญเบ‡เบกเบตเป€เบซเบ”เบœเบปเบ™. เปƒเบ™เบŠเบธเบกเบ›เบตเบกเปเปˆเป†เบกเบฒเบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป„เบ”เป‰เปƒเบŠเป‰เป€เบงเบฅเบฒเบซเบผเบฒเบเบฎเป‰เบญเบเบŠเบปเปˆเบงเป‚เบกเบ‡เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเบขเปˆเบฒเบ‡เปเบ—เป‰เบˆเบดเบ‡เบเปˆเบฝเบงเบเบฑเบšเบเปˆเบญเบ‡เบชเบตเบ”เปเบฒเบ—เบตเปˆเปเบ›เบเบ›เบฐเบซเบผเบฒเบ”เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเปƒเบŠเป‰เบ—เบธเบเป†เบกเบทเป‰. เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ เบซเบ™เป‰เบฒเบชเบปเบ™เปƒเบˆเบซเบผเบฒเบเป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒ เบญเบตเบ‡เปƒเบชเปˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ” เปเบฅเบฐเปƒเบŠเป‰เบ„เบทเบ™เป„เบ”เป‰. เบ–เป‰เบฒเบซเบฒเบเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบชเบปเบ™เปƒเบˆเปƒเบ™เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เปเบ•เปˆเบšเปเปˆเป€เบ„เบตเบเบกเบตเป€เบงเบฅเบฒเบซเบผเบท inclination เบเบฑเบš delve เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบปเบงเบ‚เปเป‰เบเป‰เบงเบฒเบ‡เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบกเบตเบ„เบงเบฒเบกเบชเบธเบเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบซเบปเบงเบ‚เปเป‰เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบˆเบฐเบŠเบฑเบ”เป€เบˆเบ™, เบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบ„เบงเบ™เบฎเบนเป‰เบงเบดเบ—เบตเบเบฒเบ™เบ‚เบฝเบ™เบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเปเบšเบšเบ‡เปˆเบฒเบเบ”เบฒเบเปเบฅเบฐเบเบฒเบ™เบชเบญเบšเบ–เบฒเบกเบžเบทเป‰เบ™เบ–เบฒเบ™ เบ”เบดเบš; เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ”เบฝเบงเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบนเป‰, เบ‚เป‰เบญเบเบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ.

เบ‚เป‰เบญเบเบˆเบฐเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ”เป‰เบงเบเบšเบฒเบ‡เบžเบทเป‰เบ™เบ–เบฒเบ™เบงเบดเบ—เบฐเบเบฒเบชเบฒเบ”เบ„เบญเบกเบžเบดเบงเป€เบ•เบต, เป€เบŠเบฑเปˆเบ™: เบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เป€เบงเบฅเบฒเบ‚เบญเบ‡เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ (BigO). เบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒเบšเบฒเบ‡เบ„เบปเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเบเบฝเบ”เบŠเบฑเบ‡เปเบ™เบงเบ„เบดเบ”เบ™เบตเป‰, เปเบ•เปˆเบ–เป‰เบฒเบšเปเปˆเบกเบตเบกเบฑเบ™เป€เบˆเบปเป‰เบฒเบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบ‚เบปเป‰เบฒเปƒเบˆเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เบžเบฒเบเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบซเบปเบงเบ‚เปเป‰เปƒเบซเบเปˆ, เบ‚เป‰เบญเบเบˆเบฐเบชเบธเบกเปƒเบชเปˆ เบชเบดเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบญเบเบ„เบดเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™: เบงเบดเบ—เบตเบเบฒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™ SQL เบเบฒเบ™เบชเบญเบšเบ–เบฒเบก. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบžเบฝเบ‡เปเบ•เปˆเบˆเบฐเปเบ™เบฐเบ™เปเบฒ เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™เบžเบฒเบเปƒเบ•เป‰เบเบฒเบ™ hood เป„เบ”เป‰.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ—เบตเปˆเบเบฒเบงเบ™เบฒเบ™เปเบฅเบฐเบ”เป‰เบฒเบ™เบงเบดเบŠเบฒเบเบฒเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบšเบซเบผเบฒเบ algorithms เปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™, เปƒเบŠเป‰เป€เบงเบฅเบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบžเบทเปˆเบญเบญเปˆเบฒเบ™เบกเบฑเบ™. เบšเบฒเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบญเบฒเบ”เบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเบฒเบ; เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ‚เป‰เบฒเบกเบžเบงเบเบกเบฑเบ™เป„เบ”เป‰เปเบฅเบฐเบเบฑเบ‡เป„เบ”เป‰เบฎเบฑเบšเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบปเปˆเบงเป„เบ›.

เบชเปเบฒเบฅเบฑเบšเบ„เบงเบฒเบกเบฎเบนเป‰เบซเบผเบฒเบเปƒเบ™เบšเบฑเบ™เบ”เบฒเบ—เปˆเบฒเบ™, เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™ 3 เบชเปˆเบงเบ™:

  • เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒเปเบฅเบฐเบฅเบฐเบ”เบฑเบšเบชเบนเบ‡
  • เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡เบ‚เบฐเบšเบงเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปเบšเบšเบชเบญเบšเบ–เบฒเบก
  • เบžเบฒเบšเบฅเบงเบกเบ‚เบญเบ‡เบ—เบธเบฅเบฐเบเปเบฒเปเบฅเบฐเบเบฒเบ™เบ„เบธเป‰เบกเบ„เบญเบ‡เบชเบฐเบ™เบธเบเป€เบเบต Buffer

เบเบฑเบšเป„เบ›เบซเบฒเบžเบทเป‰เบ™เบ–เบฒเบ™

เบ›เบตเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰ (เปƒเบ™ galaxy เป„เบ, เป„เบ ...), เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ•เป‰เบญเบ‡เบฎเบนเป‰เบขเปˆเบฒเบ‡เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบเปเบฒเบฅเบฑเบ‡เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”. เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบฎเบนเป‰เบงเบดเบ—เบต เปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบ”เป‰เบงเบเบซเบปเบงเปƒเบˆ เป€เบžเบฒเบฐเบงเปˆเบฒเป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบšเปเปˆเบชเบฒเบกเบฒเบ”เป€เบชเบ CPU เปเบฅเบฐเบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบ‚เบญเบ‡เบ„เบญเบกเบžเบดเบงเป€เบ•เบตเบŠเป‰เบฒเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒ.

เปƒเบ™เบชเปˆเบงเบ™เบ™เบตเป‰, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบˆเบฐเป€เบ•เบทเบญเบ™เบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบšเบšเบฒเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบเป‰เบญเบ™เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบˆเบฐเปเบ™เบฐเบ™เปเบฒเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ” เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

O(1) vs O(n2)

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบšเปเปˆเบชเบปเบ™เปƒเบˆเบเบฑเบšเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡ algorithms ... เปเบฅเบฐเบžเบงเบเป€เบ‚เบปเบฒเบ–เบทเบเบ•เป‰เบญเบ‡!

เปเบ•เปˆเป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ (เบ‚เป‰เบญเบเบšเปเปˆเป„เบ”เป‰เป€เบงเบปเป‰เบฒเบซเบฅเบฒเบเบžเบฑเบ™เบ„เบปเบ™) เบซเบผเบทเบ–เป‰เบฒเบ—เปˆเบฒเบ™เบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเปƒเบ™ milliseconds, เบกเบฑเบ™เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบˆเปเบฒเป€เบ›เบฑเบ™เบ—เบตเปˆเบˆเบฐเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰. เปเบฅเบฐเบ•เบฒเบกเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบˆเบดเบ™เบ•เบฐเบ™เบฒเบเบฒเบ™, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เป‰เบญเบ‡เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ—เบฑเบ‡เบชเบญเบ‡เบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™! เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เป€เบฎเบฑเบ”โ€‹เปƒเบซเป‰โ€‹เบ—เปˆเบฒเบ™โ€‹เปƒเบŠเป‰โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เป€เบเบตเบ™โ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹เป€เบ›เบฑเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เปƒเบซเป‰โ€‹เป„เบ”เป‰โ€‹เบฎเบฑเบšโ€‹เบˆเบธเบ”โ€‹เปƒเบ™โ€‹เบ—เบปเปˆเบง. เบ™เบตเป‰เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเป‚เบ”เบเบญเบตเบ‡เปƒเบชเปˆเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ•เปเปˆเบกเบฒ (เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ เบญเบตเบ‡ เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”).

เปเบ™เบงเบ„เบดเบ”

เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ‚เบญเบ‡เป€เบงเบฅเบฒเบ‚เบญเบ‡เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆ เปƒเบŠเป‰เป€เบžเบทเปˆเบญเป€เบšเบดเปˆเบ‡เบงเปˆเบฒ algorithm เบˆเบฐเปƒเบŠเป‰เป€เบงเบฅเบฒเบ”เบปเบ™เบ›เบฒเบ™เปƒเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เบชเปเบฒเป€เบฅเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰. เป€เบžเบทเปˆเบญเบญเบฐเบ—เบดเบšเบฒเบเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบ•เบปเบงเป€เบฅเบเบ—เบฒเบ‡เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”เปƒเบซเบเปˆ O. เปเบฒเบเป€เบซเบ”เบ™เบตเป‰เบ–เบทเบเปƒเบŠเป‰เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป€เบ–เบดเบ‡เบเบฒเบ™เบ”เบณเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบตเปˆเบญเบฑเบ™เบเบฃเบดเบ—เบถเบกเบ•เป‰เบญเบ‡เบเบฒเบ™เบชเบณเบฅเบฑเบšเบˆเบณเบ™เบงเบ™เบงเบฑเบ”เบชเบฐเบ”เบธเบ›เป‰เบญเบ™เป€เบ‚เบปเป‰เบฒ.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เป€เบกเบทเปˆเบญเบ‚เป‰เบญเบเป€เบงเบปเป‰เบฒเบงเปˆเบฒ "เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ™เบตเป‰เบกเบตเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™ O(some_function())", เบกเบฑเบ™เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒ algorithm เบ•เป‰เบญเบ‡เบเบฒเบ™ some_function(a_certain_amount_of_data) เป€เบžเบทเปˆเบญเบ›เบฐเบกเบงเบ™เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบˆเบถเปˆเบ‡ เบกเบฑเบ™โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™ **, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™ ** เบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบเบฑเบšเบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™. เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เป€เบงเบฅเบฒเบšเปเปˆเป„เบ”เป‰เบชเบฐเบซเบ™เบญเบ‡เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™, เปเบ•เปˆเป€เบ›เบฑเบ™เบงเบดเบ—เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบ„เบฒเบ”เบ„เบฐเป€เบ™เป€เบงเบฅเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เปƒเบ™เบเบฒเบŸเบ™เบตเป‰เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบˆเปเบฒเบ™เบงเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบฝเบšเบเบฑเบšเบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เบ—เบตเปˆเปเบ•เบเบ•เปˆเบฒเบ‡เบเบฑเบ™เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เป€เบงเบฅเบฒ algorithm. เบ‚เป‰เบญเบเปƒเบŠเป‰เบ‚เบฐเปœเบฒเบ” logarithmic เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เบžเบงเบเบกเบฑเบ™. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบˆเปเบฒเบ™เบงเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒเบˆเบฒเบ 1 เบซเบฒ 1 เบ•เบทเป‰. เบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เบงเปˆเบฒ:

  • O(1) เบซเบผเบทเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ„เบปเบ‡เบ—เบตเปˆเบ„เบปเบ‡เบ—เบตเปˆ (เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบกเบฑเบ™เบˆเบฐเบšเปเปˆเบ–เบทเบเป€เบญเบตเป‰เบ™เบงเปˆเบฒเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ„เบปเบ‡เบ—เบตเปˆ).
  • O(log(n)) เบเบฑเบ‡เบ„เบปเบ‡เบ•เปเปˆเบฒเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบซเบผเบฒเบเบ•เบทเป‰.
  • เบ„เบงเบฒเบกโ€‹เบซเบเบธเป‰เบ‡โ€‹เบเบฒเบโ€‹เบ—เบตเปˆโ€‹เบชเบธเบ” - O(n2), เบšเปˆเบญเบ™เบ—เบตเปˆเบˆเปเบฒเบ™เบงเบ™เบ‚เบญเบ‡เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.
  • เบญเบฒเบเบฒเบ™เปเบŠเบเบŠเป‰เบญเบ™เบญเบตเบเบชเบญเบ‡เบญเบฑเบ™เป€เบžเบตเปˆเบกเบ‚เบถเป‰เบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.

เบ•เบปเบงเบขเปˆเบฒเบ‡

เบ”เป‰เบงเบเบ‚เปเป‰เบกเบนเบ™เบˆเบณเบ™เบงเบ™เปœเป‰เบญเบ, เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ O(1) เปเบฅเบฐ O(n2) เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบฅเบฐเป€เบฅเบตเบ. เบ•เบปเบงเบขเปˆเบฒเบ‡, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบต algorithm เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฐเบกเบงเบ™เบœเบปเบ™ 2000 เบญเบปเบ‡เบ›เบฐเบเบญเบš.

  • O(1) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 1 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™
  • O(log(n)) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบต 7 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™
  • O(n) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 2 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™
  • O(n*log(n)) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 14 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™
  • O(n2) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 4 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™

เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡ O(1) เปเบฅเบฐ O(n2) เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเปƒเบซเบเปˆ (4 เบฅเป‰เบฒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™) เปเบ•เปˆเบ—เปˆเบฒเบ™เบˆเบฐเบชเบนเบ™เป€เบชเบเบเบฒเบ™เบชเบนเบ‡เบชเบธเบ” 2 ms, เบžเบฝเบ‡เปเบ•เปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเบ—เบตเปˆเบˆเบฐเบเบฐเบžเบดเบšเบ•เบฒเบ‚เบญเบ‡เบ—เปˆเบฒเบ™. เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบชเบฒเบกเบฒเบ”เบ›เบธเบ‡เปเบ•เปˆเบ‡ เบซเบผเบฒเบเบฎเป‰เบญเบเบฅเป‰เบฒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ•เปเปˆเบงเบดเบ™เบฒเบ—เบต. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบ—เบตเปˆเบงเปˆเบฒเบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบšเปเปˆเปเบกเปˆเบ™เบšเบฑเบ™เบซเบฒเปƒเบ™เบซเบผเบฒเบเป†เป‚เบ„เบ‡เบเบฒเบ™ IT.

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบงเบปเป‰เบฒ, เบกเบฑเบ™เบเบฑเบ‡เบกเบตเบ„เบงเบฒเบกเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบˆเบฐเบฎเบนเป‰เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ™เบตเป‰เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบ. เบ–เป‰เบฒเป€เบงเบฅเบฒเบ™เบตเป‰ algorithm เบ•เป‰เบญเบ‡เบ›เบฐเบกเบงเบ™เบœเบปเบ™ 1 เบญเบปเบ‡เบ›เบฐเบเบญเบš (เป€เบŠเบดเปˆเบ‡เบšเปเปˆเปเบกเปˆเบ™เบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™):

  • O(1) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 1 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™
  • O(log(n)) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบต 14 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™
  • O(n) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 1 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™
  • O(n*log(n)) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 14 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™.
  • O(n2) algorithm เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 1 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™.

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เป€เบฎเบฑเบ”โ€‹เบ„เบฐโ€‹เบ™เบดเบ”โ€‹เบชเบฒเบ”โ€‹, เปเบ•เปˆโ€‹เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบˆเบฐโ€‹เป€เบงเบปเป‰เบฒโ€‹เบงเปˆเบฒโ€‹เบ”เป‰เบงเบ O(n2) algorithm เบ—เปˆเบฒเบ™โ€‹เบกเบตโ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เบ”เบทเปˆเบกโ€‹เบเบฒโ€‹เป€เบŸ (เปเบกเป‰โ€‹เปเบ•เปˆโ€‹เบชเบญเบ‡โ€‹!). เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบžเบตเปˆเบก 0 เบญเบทเปˆเบ™เปƒเบชเปˆเบ›เบฐเบฅเบดเบกเบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เป€เบˆเบปเป‰เบฒเบˆเบฐเบกเบตเป€เบงเบฅเบฒเบ™เบญเบ™เบซเบผเบฑเบš.

เปƒเบซเป‰เป€เบฅเบดเบเป„เบ›เบเบงเปˆเบฒเบ™เบตเป‰

เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบดเบ‡:

  • เบเบฒเบ™เบŠเบญเบเบซเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบ—เบตเปˆเบ”เบตเบŠเบญเบเบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™ O(1).
  • เบเบฒเบ™เบŠเบญเบเบซเบฒเบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบกเบตเบ„เบงเบฒเบกเบชเบปเบกเบ”เบนเบ™เบ”เบตเบˆเบฐเปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™ O(log(n)).
  • เบเบฒเบ™เบŠเบญเบเบซเบฒ array เบชเป‰เบฒเบ‡เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปƒเบ™ O(n).
  • เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”เบกเบตเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™ O(n*log(n)).
  • เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ—เบตเปˆเบšเปเปˆเบ”เบตเบกเบตเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™ O(n2).

เบซเบกเบฒเบเป€เบซเบ”: เปƒเบ™เบžเบฒเบเบชเปˆเบงเบ™เบ•เปเปˆเป„เบ›เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™ algorithms เปเบฅเบฐเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰.

เบกเบตเบซเบผเบฒเบเบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เป€เบงเบฅเบฒ algorithm:

  • เบเปเบฅเบฐเบ™เบตเบชเบฐเป€เบฅเปˆเบ
  • เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบชเบธเบ”
  • เปเบฅเบฐเบชเบฐเบ–เบฒเบ™เบฐเบเบฒเบ™เบเปเบฅเบฐเบ™เบตเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”

เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เป€เบงเบฅเบฒเบกเบฑเบเบˆเบฐเป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบ—เบตเปˆเบชเบธเบ”.

เบ‚เป‰เบฒโ€‹เบžเบฐโ€‹เป€เบˆเบปเป‰เบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เป€เบงเบปเป‰เบฒโ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฑเบšโ€‹เบชเบปเบ™โ€‹เบ‚เบญเบ‡โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ‚เบญเบ‡โ€‹เบงเบดโ€‹เบ—เบตโ€‹เบเบฒเบ™โ€‹, เปเบ•เปˆโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฑเบšโ€‹เบชเบปเบ™โ€‹เบเบฑเบ‡โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฑเบšโ€‹:

  • เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเบ‚เบญเบ‡ algorithm
  • เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เบšเปเบฅเบดเป‚เบžเบเบ”เบดเบชเบเปŒ I/O

เปเบ™เปˆเบ™เบญเบ™, เบกเบตเบญเบฒเบเบฒเบ™เปเบŠเบเบŠเป‰เบญเบ™เบ—เบตเปˆเบฎเป‰เบฒเบเปเบฎเบ‡เบเบงเปˆเบฒ n2, เบ•เบปเบงเบขเปˆเบฒเบ‡:

  • n4: เบญเบฑเบ™เบ™เบตเป‰เบ‚เบตเป‰เบฎเป‰เบฒเบ! เบšเบฒเบ‡ algorithms เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบกเบตเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เบ™เบตเป‰.
  • 3n: เบญเบฑเบ™เบ™เบตเป‰เบเบดเปˆเบ‡เบฎเป‰เบฒเบเปเบฎเบ‡! เบซเบ™เบถเปˆเบ‡เปƒเบ™ algorithms เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบขเบนเปˆเป€เบ„เบดเปˆเบ‡เบเบฒเบ‡เบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เบกเบตเบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ™เบตเป‰ (เปเบฅเบฐเบ•เบปเบงเบˆเบดเบ‡เปเบฅเป‰เบงเบกเบฑเบ™เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบซเบผเบฒเบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™).
  • factorial n: เบ—เปˆเบฒเบ™เบˆเบฐเบšเปเปˆเป€เบ„เบตเบเป„เบ”เป‰เบฎเบฑเบšเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™เป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒเบกเบตเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบ™เป‰เบญเบเป†.
  • nn: เบ–เป‰เบฒเป€เบˆเบปเป‰เบฒเบžเบปเบšเบ„เบงเบฒเบกเบŠเบฑเบšเบŠเป‰เบญเบ™เบ™เบตเป‰ เป€เบˆเบปเป‰เบฒเบ„เบงเบ™เบ–เบฒเบกเบ•เบปเบงเป€เบญเบ‡เบงเปˆเบฒ เบ™เบตเป‰เปเบกเปˆเบ™เบเบดเบ”เบˆเบฐเบเบณเบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเปเบ—เป‰เป†เบšเป...

เบซเบกเบฒเบเป€เบซเบ”: เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบšเปเปˆเป„เบ”เป‰เปƒเบซเป‰เบ„เปเบฒเบ™เบดเบเบฒเบกเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบญเบญเบเปเบšเบš O เปƒเบซเบเปˆ, เบžเบฝเบ‡เปเบ•เปˆเบ„เบงเบฒเบกเบ„เบดเบ”. เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰เป„เบ”เป‰เบ—เบตเปˆ Wikipedia เบชเปเบฒเบฅเบฑเบšเบ„เปเบฒเบ™เบดเบเบฒเบกเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡ (asymptotic).

MergeSort

เป€เบˆเบปเป‰เบฒเป€เบฎเบฑเบ”เบซเบเบฑเบ‡เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ„เปเป€เบฅเบฑเบเบŠเบฑเบ™? เปเบกเปˆเบ™โ€‹เบซเบเบฑเบ‡? เป€เบˆเบปเป‰เบฒเป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™ sort()... เป‚เบญเป€เบ„, เบ„เบณเบ•เบญเบšเบ—เบตเปˆเบ”เบต... เปเบ•เปˆเบชเบณเบฅเบฑเบšเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เป€เบˆเบปเป‰เบฒเบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ sort() เบ™เบตเป‰.

เบกเบตเบซเบผเบฒเบเบงเบดเบ—เบตเบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ—เบตเปˆเบ”เบต, เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบฐเป€เบ™เบฑเป‰เบ™เปƒเบชเปˆเบชเบดเปˆเบ‡เบ—เบตเปˆเบชเบณเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”: เบฎเบงเบกเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡. เบ—เปˆเบฒเบ™เบญเบฒเบ”เบˆเบฐเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบงเปˆเบฒเป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ‚เปเป‰เบกเบนเบ™เบˆเบถเปˆเบ‡เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™, เปเบ•เปˆเบ—เปˆเบฒเบ™เบ„เบงเบ™เบซเบผเบฑเบ‡เบˆเบฒเบเบžเบฒเบเบชเปˆเบงเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบเบฒเบ™เบชเบญเบšเบ–เบฒเบก. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบเบฒเบ™เบฅเบงเบกเบเบฑเบ™เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเปƒเบ™เบžเบฒเบเบซเบฅเบฑเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบฅเบงเบก เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก (เบเบฒเบ™โ€‹เบฎเปˆเบงเบกโ€‹เบกเบทโ€‹เบชเบฐโ€‹เบกเบฒโ€‹เบ„เบปเบกโ€‹).

เบฎเบงเบก

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบ, เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบเบฒเบ™เบฅเบงเบกเปเบกเปˆเบ™เบญเบตเบ‡เปƒเบชเปˆ trick: เบเบฒเบ™เบฅเบงเบก 2 arrays เบ—เบตเปˆเบˆเบฑเบ”เบฎเบฝเบ‡เบ‚เบฐเบซเบ™เบฒเบ” N/2 เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ N-element array เบ—เบตเปˆเบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบžเบฝเบ‡เปเบ•เปˆ N เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™. เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™.

เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”เบเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเป†:

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เบ•เบปเบงโ€‹เป€เบฅเบโ€‹เบ™เบตเป‰โ€‹เบชเบฐโ€‹เปเบ”เบ‡โ€‹เปƒเบซเป‰โ€‹เป€เบซเบฑเบ™โ€‹เบงเปˆเบฒโ€‹เป€เบžเบทเปˆเบญโ€‹เบชเป‰เบฒเบ‡โ€‹เบญเบฒโ€‹เป€เบฃ 8 เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ—เบตเปˆโ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹เบชเบธเบ”โ€‹เบ—เป‰เบฒเบโ€‹, เบ—เปˆเบฒเบ™โ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบ•เป‰เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐ iterate เบ„เบฑเป‰เบ‡โ€‹เบ”เบฝเบงโ€‹เปƒเบ™โ€‹เป„เบฅโ€‹เบเบฐ 2 4 arraysโ€‹. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบ—เบฑเบ‡เบชเบญเบ‡ 4-element arrays เบ–เบทเบเบˆเบฑเบ”เบฎเบฝเบ‡เปเบฅเป‰เบง:

  • 1โ€‹) เบ—เปˆเบฒเบ™โ€‹เบชเบปเบกโ€‹เบ—เบฝเบšโ€‹เบ—เบฑเบ‡โ€‹เบชเบญเบ‡โ€‹เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เปƒเบ™โ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™โ€‹เปƒเบ™โ€‹เบชเบญเบ‡โ€‹เบญเบฒโ€‹เป€เบฃ (เปƒเบ™โ€‹เบ•เบญเบ™โ€‹เบ•เบปเป‰เบ™โ€‹เบ›เบฐโ€‹เบˆเบธโ€‹เบšเบฑเบ™ = เบ„เบฑเป‰เบ‡โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹)
  • 2) เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เป€เบญเบปเบฒเบญเบฑเบ™เบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เบกเบฒเปƒเบชเปˆเปƒเบ™ 8 เบญเบปเบ‡เบ›เบฐเบเบญเบš array
  • 3) เปเบฅเบฐเบเป‰เบฒเบเป„เบ›เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ•เปเปˆเป„เบ›เปƒเบ™ array เบšเปˆเบญเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบ™เป‰เบญเบเบ—เบตเปˆเบชเบธเบ”
  • เปเบฅเบฐเป€เบฎเบฑเบ”เบŠเป‰เบณ 1,2,3 เบˆเบปเบ™เบเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบˆเบฐเป„เบ›เบฎเบญเบ”เบญเบปเบ‡เบ›เบฐเบเบญเบšเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เปœเบถเปˆเบ‡เปƒเบ™เบญเบฒเป€เบฃ.
  • เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบ‚เบญเบ‡ array เบญเบทเปˆเบ™เป†เป€เบžเบทเปˆเบญเปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ 8 เบญเบปเบ‡เบ›เบฐเบเบญเบš array.

เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเป€เบžเบฒเบฐเบงเปˆเบฒเบ—เบฑเบ‡เบชเบญเบ‡ array 4 เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ–เบทเบเบˆเบฑเบ”เบฎเบฝเบ‡เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡ "เบเบฑเบšเบ„เบทเบ™" เปƒเบ™ array เป€เบซเบผเบปเปˆเบฒเบ™เบฑเป‰เบ™.

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆ trick, เบ™เบตเป‰เปเบกเปˆเบ™ pseudocode เบ‚เบญเบ‡เบ‚เป‰เบญเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบงเบก:

array mergeSort(array a)
   if(length(a)==1)
      return a[0];
   end if

   //recursive calls
   [left_array right_array] := split_into_2_equally_sized_arrays(a);
   array new_left_array := mergeSort(left_array);
   array new_right_array := mergeSort(right_array);

   //merging the 2 small ordered arrays into a big one
   array result := merge(new_left_array,new_right_array);
   return result;

Merge sort breaks a problem into smaller problems and then find the results of the smaller problems to get the result of the original problems (เบซเบกเบฒเบโ€‹เป€เบซเบ”: เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡ algorithm เบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒเบเบฒเบ™เปเบšเปˆเบ‡เปเบฅเบฐ conquer). เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆ algorithm เบ™เบตเป‰, เบขเปˆเบฒเบเบฑเบ‡เบงเบปเบ™; เบ‚เป‰เบญเบเบšเปเปˆเป€เบ‚เบปเป‰เบฒเปƒเบˆเบกเบฑเบ™เป€เบ—เบทเปˆเบญเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบ‚เป‰เบญเบเป€เบซเบฑเบ™เบกเบฑเบ™. เบ–เป‰เบฒเบกเบฑเบ™เบชเบฒเบกเบฒเบ”เบŠเปˆเบงเบเป€เบˆเบปเป‰เบฒเป„เบ”เป‰, เบ‚เป‰เบญเบเป€เบซเบฑเบ™ algorithm เบ™เบตเป‰เปเบกเปˆเบ™ algorithm เบชเบญเบ‡เป„เบฅเบเบฐ:

  • เป„เบฅเบเบฐเบเบฒเบ™เปเบšเปˆเบ‡, เบšเปˆเบญเบ™เบ—เบตเปˆ array เบ–เบทเบเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™ array เบ™เป‰เบญเบเบเบงเปˆเบฒ
  • เป„เบฅเบเบฐเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เปเบกเปˆเบ™เบšเปˆเบญเบ™เบ—เบตเปˆเบญเบฒเป€เบฃเบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบเบ–เบทเบเบฅเบงเบกเป€เบ‚เบปเป‰เบฒเบเบฑเบ™ (เป‚เบ”เบเบ™เปเบฒเปƒเบŠเป‰เบชเบฐเบซเบฐเบžเบฒเบš) เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เป€เบ›เบฑเบ™เบญเบฒเป€เบฃเบ—เบตเปˆเปƒเบซเบเปˆเบเบงเปˆเบฒ.

เป„เบฅเบเบฐเบเบฒเบ™เปเบšเปˆเบ‡

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบเบฒเบ™เปเบšเปˆเบ‡, array เบ–เบทเบเปเบšเปˆเบ‡เบญเบญเบเป€เบ›เบฑเบ™ array unitary เปƒเบ™ 3 เบ‚เบฑเป‰เบ™เบ•เบญเบ™. เบˆเปเบฒเบ™เบงเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เปเบกเปˆเบ™เบšเบฑเบ™เบ—เบถเบ(N) (เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ N=8, เบšเบฑเบ™เบ—เบถเบ(N) = 3).

เบ‚เป‰เบญเบเบฎเบนเป‰เป€เบฅเบทเปˆเบญเบ‡เบ™เบตเป‰เป„เบ”เป‰เปเบ™เบงเปƒเบ”?

เบ‚เป‰เบญเบเป€เบ›เบฑเบ™เบ„เบปเบ™เบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ! เปƒเบ™เบ„เปเบฒเบชเบฑเบšเปƒเบ”เบซเบ™เบถเปˆเบ‡ - เบ„เบฐเบ™เบดเบ”เบชเบฒเบ”. เบ„เบงเบฒเบกเบ„เบดเบ”เปเบกเปˆเบ™เบงเปˆเบฒเปเบ•เปˆเบฅเบฐเบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบšเปˆเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบญเบฒเป€เบฅเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเป‚เบ”เบ 2. เบˆเปเบฒเบ™เบงเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เปเบกเปˆเบ™เบˆเปเบฒเบ™เบงเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เปเบšเปˆเบ‡เบญเบฒเป€เบฃเบ•เบปเป‰เบ™เบชเบฐเบšเบฑเบšเป€เบ›เบฑเบ™เบชเบญเบ‡. เบ™เบตเป‰เปเบกเปˆเบ™เบ„เปเบฒเบ™เบดเบเบฒเบกเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ‚เบญเบ‡ logarithm (เบ–เบฒเบ™ 2).

เป„เบฅเบเบฐเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เปƒเบ™โ€‹เป„เบฅโ€‹เบเบฐโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบฅเปเบฒโ€‹เบ”เบฑเบšโ€‹, เบ—เปˆเบฒเบ™โ€‹เป€เบฅเบตเปˆเบกโ€‹เบ•เบปเป‰เบ™โ€‹เบ”เป‰เบงเบโ€‹เบญเบฒโ€‹เป€เบฃ unitary (เบญเบปเบ‡โ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบ”เบฝเบงโ€‹)โ€‹. เปƒเบ™โ€‹เบฅเบฐโ€‹เบซเบงเปˆเบฒเบ‡โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เบฅเบงเบกโ€‹เบซเบผเบฒเบโ€‹เปเบฅเบฐโ€‹เบ„เปˆเบฒโ€‹เปƒเบŠเป‰โ€‹เบˆเปˆเบฒเบโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เปเบกเปˆเบ™ N = 8 เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹:

  • เปƒเบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เปเบฒโ€‹เบญเบดเบ”โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบต 4 เบฅเบงเบกโ€‹เบ—เบตเปˆโ€‹เบกเบตโ€‹เบฅเบฒโ€‹เบ„เบฒโ€‹เบ–เบทเบ 2 เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹
  • เปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ—เบตเบชเบญเบ‡, เบ—เปˆเบฒเบ™เบกเบต 2 เบœเบฐเบชเบปเบกเบœเบฐเบชเบฒเบ™เบ—เบตเปˆเบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 4 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เปเบ•เปˆเบฅเบฐเบ„เบปเบ™
  • เปƒเบ™โ€‹เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹เบ—เบตโ€‹เบชเบฒเบกโ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบต 1 merge เบ—เบตเปˆโ€‹เบกเบตโ€‹เบ„เปˆเบฒโ€‹เปƒเบŠเป‰โ€‹เบˆเปˆเบฒเบ 8 เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹

เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เบšเบฑเบ™โ€‹เบ—เบถเบ (Nโ€‹) เบ‚เบฑเป‰เบ™โ€‹เบ•เบญเบ™โ€‹, เบ„เปˆเบฒโ€‹เปƒเบŠเป‰โ€‹เบˆเปˆเบฒเบโ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ” N * log(N) เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™.

เบ‚เปเป‰เป„เบ”เป‰เบ›เบฝเบšเบ‚เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบฅเบงเบก

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ™เบตเป‰เบˆเบถเปˆเบ‡เบกเบตเบžเบฐเบฅเบฑเบ‡เบซเบผเบฒเบ?

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒ:

  • เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ›เปˆเบฝเบ™โ€‹เปเบ›เบ‡โ€‹เบกเบฑเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบซเบผเบธเบ”โ€‹เบœเปˆเบญเบ™โ€‹เบฎเบญเบโ€‹เบ„เบงเบฒเบกโ€‹เบŠเบปเบ‡โ€‹เบˆเปเบฒโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบ—เปˆเบฒเบ™โ€‹เบšเปเปˆโ€‹เป„เบ”เป‰โ€‹เบชเป‰เบฒเบ‡โ€‹เบญเบฒโ€‹เป€เบฃโ€‹เปƒเบซเบกเปˆโ€‹เปเบ•เปˆโ€‹เบเบฒเบ™โ€‹เปเบเป‰โ€‹เป„เบ‚ array เบเบฒเบ™โ€‹เบ›เป‰เบญเบ™โ€‹เบ‚เปเป‰โ€‹เบกเบนเบ™โ€‹เป‚เบ”เบโ€‹เบเบปเบ‡โ€‹.

เบซเบกเบฒเบเป€เบซเบ”: เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒ in-เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆ (เบˆเบฑเบ”เบฎเบฝเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบŠเบปเบ‡เบˆเปเบฒเป€เบžเบตเปˆเบกเป€เบ•เบตเบก).

  • เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบ›เปˆเบฝเบ™โ€‹เบกเบฑเบ™โ€‹เป€เบžเบทเปˆเบญโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰โ€‹เบžเบทเป‰เบ™โ€‹เบ—เบตเปˆโ€‹เปเบœเปˆเบ™โ€‹เปเบฅเบฐโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบฐโ€‹เบซเบ™เบฒเบ”โ€‹เบ™เป‰เบญเบโ€‹เบ‚เบญเบ‡โ€‹เบซเบ™เปˆเบงเบโ€‹เบ„เบงเบฒเบกโ€‹เบˆเปเบฒโ€‹เปƒเบ™โ€‹เป€เบงโ€‹เบฅเบฒโ€‹เบ”เบฝเบงโ€‹เบเบฑเบ™โ€‹เป‚เบ”เบโ€‹เบšเปเปˆโ€‹เบกเบตโ€‹เบเบฒเบ™โ€‹เป€เบเบตเบ”โ€‹เบญเบธโ€‹เบ›เบฐโ€‹เบเบญเบ™ I/O เปเบœเปˆเบ™โ€‹เบ—เบตเปˆโ€‹เบชเปเบฒโ€‹เบ„เบฑเบ™โ€‹. เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เปเบกเปˆเบ™เป€เบžเบทเปˆเบญเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒเบžเบฝเบ‡เปเบ•เปˆเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบเปเบฒเบฅเบฑเบ‡เบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™เปƒเบ™เบ›เบฐเบˆเบธเบšเบฑเบ™. เบ™เบตเป‰เป€เบ›เบฑเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบผเบฒเบเบเบดเบเบฒเป„เบšเบ—เบตเปˆเบกเบตเบžเบฝเบ‡เปเบ•เปˆ 100-megabyte buffer เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ.

เบซเบกเบฒเบเป€เบซเบ”: เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ™เบตเป‰เป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบžเบฒเบเบ™เบญเบ.

  • เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบกเบฑเบ™เปƒเบซเป‰เปเบฅเปˆเบ™เปƒเบ™เบซเบผเบฒเบเบ‚เบฐเบšเบงเบ™เบเบฒเบ™/เบเบฐเบ—เบนเป‰/เป€เบŠเบตเบšเป€เบงเบต.

เบ•เบปเบงเบขเปˆเบฒเบ‡, เบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡เบเบฒเบ™เบฅเบงเบกเบ—เบตเปˆเปเบˆเบเบขเบฒเบเปเบกเปˆเบ™เบซเบ™เบถเปˆเบ‡เปƒเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™ Hadoop (เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปƒเบ™เบ‚เปเป‰เบกเบนเบ™เปƒเบซเบเปˆ).

  • เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบ™เบตเป‰เบชเบฒเบกเบฒเบ”เบ›เปˆเบฝเบ™เบ™เปเบฒเป„เบ›เบชเบนเปˆเบ„เปเบฒ (เปเบ—เป‰เป†!).

เบชเบนเบ”เบเบฒเบ™เบฎเบฝเบ‡เบฅเปเบฒเบ”เบฑเบšเบ™เบตเป‰เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบชเปˆเบงเบ™เปƒเบซเบเปˆ (เบ–เป‰เบฒเบšเปเปˆเปเบกเปˆเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”), เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเปเบกเปˆเบ™เบญเบฑเบ™เบ”เบฝเบง. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบนเป‰เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เป„เบ”เป‰ เบงเบฝเบเบ„เบปเป‰เบ™เบ„เป‰เบงเบฒ, เป€เบŠเบดเปˆเบ‡เบ›เบถเบเบชเบฒเบซเบฒเบฅเบทเบ‚เปเป‰เบ”เบตเปเบฅเบฐเบ‚เปเป‰เป€เบชเบเบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบเบฒเบ™เบˆเบฑเบ”เบฎเบฝเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›.

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ Array, Tree เปเบฅเบฐ Hash

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ‚เบญเบ‡เบ„เบงเบฒเบกเบชเบฑเบšเบชเบปเบ™เบ—เบตเปˆเปƒเบŠเป‰เป€เบงเบฅเบฒเปเบฅเบฐเบเบฒเบ™เบˆเบฑเบ”เบฅเบฝเบ‡, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบ„เบงเบ™เบšเบญเบเบ—เปˆเบฒเบ™เบเปˆเบฝเบงเบเบฑเบš 3 เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบชเปเบฒเบ„เบฑเบ™เป€เบžเบฒเบฐเบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒ เปเบกเปˆเบ™เบžเบทเป‰เบ™เบ–เบฒเบ™เบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบก. เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเบฑเบ‡เบˆเบฐเปเบ™เบฐเบ™เปเบฒเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ” เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบญเบฒเป€เบฅ

array เบชเบญเบ‡เบกเบดเบ•เบดเปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ‡เปˆเบฒเบเบ—เบตเปˆเบชเบธเบ”. เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบชเบฒเบกเบฒเบ”เบ„เบดเบ”เบงเปˆเบฒเป€เบ›เบฑเบ™ array. เบเบปเบโ€‹เบ•เบปเบงโ€‹เบขเปˆเบฒเบ‡:

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เบญเบฒเป€เบฃ 2 เบกเบดเบ•เบดเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบกเบตเปเบ–เบง เปเบฅเบฐเบ–เบฑเบ™:

  • เปเบ•เปˆเบฅเบฐเปเบ–เบงเบชเบฐเปเบ”เบ‡เป€เบ–เบดเบ‡เบ™เบดเบ•เบดเบšเบธเบเบ„เบปเบ™
  • เบ–เบฑเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบญเบฐเบ—เบดเบšเบฒเบเป€เบ–เบดเบ‡เบ™เบดเบ•เบดเบšเบธเบเบ„เบปเบ™.
  • เปเบ•เปˆเบฅเบฐเบ–เบฑเบ™เป€เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบ›เบฐเป€เบžเบ”เบชเบฐเป€เบžเบฒเบฐ (เบˆเบณเบ™เบงเบ™เป€เบ•เบฑเบก, เบชเบฐเบ•เบฃเบดเบ‡, เบงเบฑเบ™เบ—เบต...).

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบ”เบงเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเปเบฅเบฐเบเบฒเบ™เป€เบšเบดเปˆเบ‡เป€เบซเบฑเบ™เบ‚เปเป‰เบกเบนเบ™, เบขเปˆเบฒเบ‡เปƒเบ”เบเปเบ•เบฒเบก, เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบกเบนเบ™เบ„เปˆเบฒเบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡, เบ™เบตเป‰เบšเปเปˆเป€เบซเบกเบฒเบฐเบชเบปเบก.

เบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบขเปˆเบฒเบ‡, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเบœเบนเป‰เบŠเบฒเบเบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบญเบฑเบ‡เบเบดเบ”, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เปเบ•เปˆเบฅเบฐเปเบ–เบงเป€เบžเบทเปˆเบญเบเปเบฒเบ™เบปเบ”เบงเปˆเบฒเปเบ–เบงเบ™เบฑเป‰เบ™เป€เบ›เบฑเบ™เบ‚เบญเบ‡เบญเบฑเบ‡เบเบดเบ”. เบกเบฑเบ™เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ—เปˆเบฒเบ™เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ N เบเบฒเบ™เป€เบฎเบฑเบ”เบ—เบธเบฅเบฐเบเปเบฒเบšเปˆเบญเบ™เบ—เบตเปˆ N - เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ‚เบญเบ‡โ€‹เบชเบฒเบโ€‹, เบŠเบถเปˆเบ‡โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เบšเปเปˆโ€‹เบ”เบตโ€‹, เปเบ•เปˆโ€‹เบงเปˆเบฒโ€‹เบˆเบฐโ€‹เบกเบตโ€‹เบงเบดโ€‹เบ—เบตโ€‹เบ—เบตเปˆโ€‹เป„เบงโ€‹เบเบงเปˆเบฒโ€‹? เบ”เบฝเบงเบ™เบตเป‰เป€เบ–เบดเบ‡เป€เบงเบฅเบฒเปเบฅเป‰เบงเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ—เบณเบ„เบงเบฒเบกเบฎเบนเป‰เบˆเบฑเบเบเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰.

เบซเบกเบฒเบเป€เบซเบ”: เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเบชเปˆเบงเบ™เปƒเบซเบเปˆเบชเบฐเบซเบ™เบญเบ‡ arrays เบ‚เบฐเบซเบเบฒเบเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš: heap-organizedtables เปเบฅเบฐ index-organizedtables. เปเบ•เปˆเบ™เบตเป‰เบšเปเปˆเป„เบ”เป‰เบ›เปˆเบฝเบ™เบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเป€เบ‡เบทเปˆเบญเบ™เป„เบ‚เบชเบฐเป€เบžเบฒเบฐเปƒเบ”เบซเบ™เบถเปˆเบ‡เปƒเบ™เบเบธเปˆเบกเบ‚เบญเบ‡เบ–เบฑเบ™เบขเปˆเบฒเบ‡เป„เบงเบงเบฒ.

เบ•เบปเป‰เบ™เป„เบกเป‰เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบ”เบฑเบ”เบŠเบฐเบ™เบต

เบ•เบปเป‰เบ™เป„เบกเป‰เบ„เบปเป‰เบ™เบซเบฒเป„เบšเบ™เบฒเบฃเบตเปเบกเปˆเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบ„เบนเปˆเบ—เบตเปˆเบกเบตเบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบžเบดเป€เบชเบ”, เบเบธเบ™เปเบˆเปƒเบ™เปเบ•เปˆเบฅเบฐ node เบˆเบฐเบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™:

  • เปƒเบซเบเปˆเบเบงเปˆเบฒเบเบฐเปเบˆเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบŠเป‰เบฒเบ
  • เปœเป‰เบญเบเบเบงเปˆเบฒเบเบฐเปเบˆเบ—เบฑเบ‡เปเบปเบ”เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡

เปƒเบซเป‰เป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบญเบฑเบ™เบ™เบตเป‰เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเปเบ™เบงเปƒเบ”

Idea

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เบ•เบปเป‰เบ™เป„เบกเป‰เบ™เบตเป‰เบกเบต N = 15 เบญเบปเบ‡เบ›เบฐเบเบญเบš. เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒ 208:

  • เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบฎเบฒเบเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™ 136. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ 136<208, เบ‚เป‰เบญเบเป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบซเบปเบงเบ‚เปเป‰เบเปˆเบญเบเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡เบ‚เบญเบ‡ node 136.
  • 398> 208 เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบšเบดเปˆเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบŠเป‰เบฒเบเบ‚เบญเบ‡ node 398
  • 250> 208 เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบšเบดเปˆเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบŠเป‰เบฒเบเบ‚เบญเบ‡ node 250
  • 200<208, เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเบขเบนเปˆเปƒเบ™ subtree เบชเบดเบ”เบ—เบดเบ‚เบญเบ‡ node 200. เปเบ•เปˆ 200 เบšเปเปˆเบกเบต subtree เบชเบดเบ”, เบ„เปˆเบฒเบšเปเปˆเบกเบตเบขเบนเปˆ (เป€เบžเบฒเบฐเบงเปˆเบฒเบ–เป‰เบฒเบกเบฑเบ™เบกเบตเบขเบนเปˆ, เบกเบฑเบ™เบˆเบฐเบขเบนเปˆเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ 200).

เบ•เบญเบ™เบ™เบตเป‰เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒ 40

  • เบ‚เป‰เบญเบเป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเบฎเบฒเบเบ—เบตเปˆเบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™ 136. เบ•เบฑเป‰เบ‡เปเบ•เปˆ 136 > 40, เบ‚เป‰เบญเบเป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เปเบ–เบšเบเปˆเบญเบเบŠเป‰เบฒเบเบ‚เบญเบ‡ node 136.
  • 80 > 40, เป€เบžเบฒเบฐเบชเบฐเบ™เบฑเป‰เบ™, เบ‚เป‰เบญเบเบเปเบฒเบฅเบฑเบ‡เป€เบšเบดเปˆเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบเบŠเป‰เบฒเบเบ‚เบญเบ‡ node 80
  • 40= 40, node เบกเบตเบขเบนเปˆ. เบ‚เป‰เบญเบเบ”เบถเบ‡เป€เบญเบปเบฒ ID เปเบ–เบงเบžเบฒเบเปƒเบ™ node (เบšเปเปˆเบชเบฐเปเบ”เบ‡เบขเบนเปˆเปƒเบ™เบฎเบนเบš) เปเบฅเบฐเป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบชเปเบฒเบฅเบฑเบš ID เปเบ–เบงเบ—เบตเปˆเปƒเบซเป‰.
  • เบเบฒเบ™เบฎเบนเป‰ ID เปเบ–เบงเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบฎเบนเป‰เปเบ™เปˆเบ™เบญเบ™เบงเปˆเบฒเบ‚เปเป‰เบกเบนเบ™เบขเบนเปˆเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบชเบฒเบกเบฒเบ”เบ”เบถเบ‡เบ‚เปเป‰เบกเบนเบ™เป„เบ”เป‰เบ—เบฑเบ™เบ—เบต.

เปƒเบ™เบ—เบตเปˆเบชเบธเบ”, เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบˆเบฐเป€เบฎเบฑเบ”เปƒเบซเป‰เบ‚เป‰เบญเบเบกเบตเบˆเปเบฒเบ™เบงเบ™เบฅเบฐเบ”เบฑเบšเบžเบฒเบเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰. เบ–เป‰เบฒโ€‹เบซเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบญเปˆเบฒเบ™โ€‹เบžเบฒเบโ€‹เบชเปˆเบงเบ™โ€‹เบเปˆเบฝเบงโ€‹เบเบฑเบšโ€‹เบเบฒเบ™โ€‹เบˆเบฑเบ”โ€‹เบฅเบฝเบ‡โ€‹เบฅเบงเบกโ€‹เบฅเบฐโ€‹เบกเบฑเบ”โ€‹เบฅเบฐโ€‹เบงเบฑเบ‡โ€‹, เบ—เปˆเบฒเบ™โ€‹เบ„เบงเบ™โ€‹เบˆเบฐโ€‹เป€เบšเบดเปˆเบ‡โ€‹เบงเปˆเบฒโ€‹เบกเบตโ€‹เบฅเบฐโ€‹เบ”เบฑเบš log(Nโ€‹)โ€‹. เบกเบฑเบ™ turns เบญเบญเบ, เบšเบฑเบ™เบ—เบถเบเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปƒเบ™เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ (N), เบšเปเปˆโ€‹เบ”เบต!

เปƒเบซเป‰เบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ

เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบšเปเปˆเบกเบตเบ•เบปเบงเบ•เบปเบ™เบซเบผเบฒเบ, เบชเบฐเบ™เบฑเป‰เบ™เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบšเบ„เบทเบ™เป„เบ›เบซเบฒเบšเบฑเบ™เบซเบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ. เปเบ—เบ™โ€‹เบ—เบตเปˆโ€‹เบˆเบฐโ€‹เป€เบ›เบฑเบ™โ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เป€เบ•เบฑเบกโ€‹เบ‡เปˆเบฒเบโ€‹เบ”เบฒเบโ€‹, เบˆเบดเบ™โ€‹เบ•เบฐโ€‹เบ™เบฒโ€‹เบเบฒเบ™โ€‹เบชเบฐโ€‹เบ•โ€‹เบฃเบดเบ‡โ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เบ•เบปเบงโ€‹เปเบ—เบ™โ€‹เบ‚เบญเบ‡โ€‹เบ›เบฐโ€‹เป€เบ—เบ”โ€‹เบ‚เบญเบ‡โ€‹เบœเบนเป‰โ€‹เปƒเบ”โ€‹เบœเบนเป‰โ€‹เบซเบ™เบถเปˆเบ‡โ€‹เปƒเบ™โ€‹เบ•เบฒโ€‹เบ•เบฐโ€‹เบฅเบฒเบ‡โ€‹เบเปˆเบญเบ™โ€‹เบซเบ™เป‰เบฒโ€‹เบ™เบตเป‰โ€‹. เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบกเบตเบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบžเบฒเบเบชเบฐเบซเบ™เบฒเบก "เบ›เบฐเป€เบ—เบ”" (เบ„เปเบฅเปเบฒ 3) เบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡:

  • เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบฎเบนเป‰เบงเปˆเบฒเบœเบนเป‰เบ—เบตเปˆเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบญเบฑเบ‡เบเบดเบ”
  • เบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบ—เบตเปˆเป€เบ›เบฑเบ™เบ•เบปเบงเปเบ—เบ™เบ‚เบญเบ‡ Great Britain
  • เบžเบฒเบเปƒเบ™ "UKnode" เบ—เปˆเบฒเบ™เบˆเบฐเบžเบปเบšเป€เบซเบฑเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบšเบฑเบ™เบ—เบถเบเบžเบฐเบ™เบฑเบเบ‡เบฒเบ™เบญเบฑเบ‡เบเบดเบ”.

เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ™เบตเป‰เบˆเบฐเบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ log(N) เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเบ”เปเบฒเป€เบ™เบตเบ™เบเบฒเบ™ N เบ–เป‰เบฒเบ—เปˆเบฒเบ™เปƒเบŠเป‰ array เป‚เบ”เบเบเบปเบ‡. เบชเบดเปˆเบ‡เบ—เบตเปˆเบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ™เปเบฒเบชเบฐเป€เบซเบ™เบตเปเบกเปˆเบ™ เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบชเป‰เบฒเบ‡โ€‹เบ•เบปเป‰เบ™โ€‹เป„เบกเป‰โ€‹เบ”เบฑเบ”โ€‹เบŠเบฐโ€‹เบ™เบตโ€‹เบชเปเบฒโ€‹เบฅเบฑเบšโ€‹เบเบธเปˆเบกโ€‹เบ‚เบญเบ‡โ€‹เบžเบฒเบโ€‹เบชเบฐโ€‹เบซเบ™เบฒเบกโ€‹เปƒเบ”โ€‹เบซเบ™เบถเปˆเบ‡ (stringโ€‹, เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹, 2 เบชเบฒเบโ€‹, เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เปเบฅเบฐโ€‹เบชเบฐโ€‹เบ•โ€‹เบฃเบดเบ‡โ€‹, เบงเบฑเบ™โ€‹เบ—เบต ... ) เบ•เบฒเบšโ€‹เปƒเบ”โ€‹เบ—เบตเปˆโ€‹เบ—เปˆเบฒเบ™โ€‹เบกเบตโ€‹เบซเบ™เป‰เบฒโ€‹เบ—เบตเปˆโ€‹เป€เบžเบทเปˆเบญโ€‹เบ›เบฝเบšโ€‹เบ—เบฝเบšโ€‹เบเบฐโ€‹เปเบˆ (เป€เบŠเบฑเปˆเบ™โ€‹: เบเบธเปˆเบกโ€‹เบžเบฒเบโ€‹เบชเบฐโ€‹เบซเบ™เบฒเบกโ€‹) เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™โ€‹เบ—เปˆเบฒเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ”โ€‹เบเปเบฒโ€‹เบ™เบปเบ” เบชเบฑเปˆเบ‡เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฐเปเบˆ (เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเปเบฅเบฐเบ™เบตเบชเปเบฒเบฅเบฑเบšเบ›เบฐเป€เบžเบ”เบžเบทเป‰เบ™เบ–เบฒเบ™เปƒเบ”เป†เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™).

B+TreeIndex

เปƒเบ™เบ‚เบฐเบ™เบฐเบ—เบตเปˆเบ•เบปเป‰เบ™เป„เบกเป‰เบ™เบตเป‰เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบ”เบตเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป„เบ”เป‰เบฎเบฑเบšเบ„เปˆเบฒเบชเบฐเป€เบžเบฒเบฐ, เบกเบตเบšเบฑเบ™เบซเบฒเปƒเบซเบเปˆเปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ เป„เบ”เป‰เบฎเบฑเบšเบซเบผเบฒเบเบญเบปเบ‡เบ›เบฐเบเบญเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบ„เปˆเบฒ. เบ™เบตเป‰เบˆเบฐเบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ O(N) เป€เบžเบฒเบฐเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป€เบšเบดเปˆเบ‡เปเบ•เปˆเบฅเบฐ node เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบกเบฑเบ™เบขเบนเปˆเบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบ„เปˆเบฒเบ™เบตเป‰เบซเบผเบทเบšเปเปˆ (เป€เบŠเบฑเปˆเบ™: เบกเบตเบเบฒเบ™เบชเบฑเปˆเบ‡เบ‚เป‰เบฒเบกเบ•เบปเป‰เบ™เป„เบกเป‰). เบเบดเปˆเบ‡โ€‹เป„เบ›โ€‹เบเบงเปˆเบฒโ€‹เบ™เบฑเป‰เบ™โ€‹, เบเบฒเบ™โ€‹เบ”เปเบฒโ€‹เป€เบ™เบตเบ™โ€‹เบ‡เบฒเบ™โ€‹เบ™เบตเป‰โ€‹เบšเปเปˆโ€‹เปเบกเปˆเบ™โ€‹เปเบœเปˆเบ™ I / O เป€เบ›เบฑเบ™โ€‹เบกเบดเบ”โ€‹เป€เบ™เบทเปˆเบญเบ‡โ€‹เบˆเบฒเบโ€‹เบงเปˆเบฒโ€‹เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เป„เบ”เป‰โ€‹เบญเปˆเบฒเบ™โ€‹เบ•เบปเป‰เบ™โ€‹เป„เบกเป‰โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹. เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบš เบ„เปเบฒโ€‹เบฎเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบฑเบโ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹. เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบšเบฑเบ™เบซเบฒเบ™เบตเป‰, เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ—เบฑเบ™เบชเบฐเป„เบซเบกเปƒเบŠเป‰เบชเบฐเบšเบฑเบšเบ”เบฑเบ”เปเบเป‰เบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ B + Tree. เบขเบนเปˆเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰ B + Tree:

  • เบžเบฝเบ‡เปเบ•เปˆเบ‚เปเป‰เบ•เปˆเปเบฒเบชเบธเบ” (เปƒเบš) เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบ‚เปเป‰เบกเบนเบ™ (เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เปเบ–เบงเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡)
  • เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญเบ‚เบญเบ‡ nodes เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ เบชเปเบฒเบฅเบฑเบšเป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡ เบเบฑเบš node เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ เปƒเบ™เบฅเบฐเบซเบงเปˆเบฒเบ‡เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒ.

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบกเบตเบ‚เปเป‰เบซเบผเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ (เบชเบญเบ‡เบ„เบฑเป‰เบ‡). เปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ—เปˆเบฒเบ™เบกเบต nodes เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, "nodes เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆ", เบ—เบตเปˆเบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบ—เปˆเบฒเบ™เบŠเบญเบเบซเบฒ node เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡ (เป€เบŠเบดเปˆเบ‡เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เปเบ–เบงเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡). เปเบ•เปˆโ€‹เบ„เบงเบฒเบกโ€‹เบชเบฑเบšโ€‹เบชเบปเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ„เบปเป‰เบ™โ€‹เบซเบฒโ€‹เปเบกเปˆเบ™โ€‹เบเบฑเบ‡ O(log(N)) (เบกเบตโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบซเบ™เบถเปˆเบ‡โ€‹เบซเบผเบฒเบโ€‹)โ€‹. เบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบญเบฑเบ™เปƒเบซเบเปˆเบซเบผเบงเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ nodes เปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒเปเบกเปˆเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆเบเบฑเบšเบœเบนเป‰เบชเบทเบšเบ—เบญเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ.

เบ”เป‰เบงเบ B+Tree เบ™เบตเป‰, เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเบ„เปˆเบฒเบฅเบฐเบซเบงเปˆเบฒเบ‡ 40 เปเบฅเบฐ 100:

  • เบ—เปˆเบฒเบ™เบžเบฝเบ‡เปเบ•เปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒ 40 (เบซเบผเบทเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเปƒเบเป‰เบ„เบฝเบ‡เบ—เบตเปˆเบชเบธเบ”เบซเบผเบฑเบ‡เบˆเบฒเบ 40 เบ–เป‰เบฒ 40 เบšเปเปˆเบกเบต) เบ„เบทเบเบฑเบšเบ—เบตเปˆเบ—เปˆเบฒเบ™เป„เบ”เป‰เป€เบฎเบฑเบ”เบเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ.
  • เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เป€เบเบฑเบšเบเปเบฒ 40 heirs เป‚เบ”เบเบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เป€เบŠเบทเปˆเบญเบกเบ•เปเปˆ heir เป‚เบ”เบเบเบปเบ‡เบˆเบปเบ™เบเปˆเบงเบฒเบ—เปˆเบฒเบ™เบšเบฑเบ™เบฅเบธ 100.

เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบŠเบญเบเบซเบฒเบœเบนเป‰เบชเบทเบšเบ—เบญเบ” M เปเบฅเบฐเบ•เบปเป‰เบ™เป„เบกเป‰เบกเบต N nodes. เบŠเบญเบเบซเบฒ node เบชเบฐเป€เบžเบฒเบฐเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ log(N) เบ„เบทเบเบฑเบšเบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เปเบ•เปˆเป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ”เป‰เบฎเบฑเบš node เบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเป„เบ”เป‰เบฎเบฑเบš M successors เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ M เบ”เป‰เบงเบเบเบฒเบ™เบญเป‰เบฒเบ‡เบญเบตเบ‡เป€เบ–เบดเบ‡เบœเบนเป‰เบชเบทเบšเบ—เบญเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ. เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ™เบตเป‰เบกเบตเบกเบนเบ™เบ„เปˆเบฒ M+log(N) เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™ เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ—เบฝเบšเบเบฑเบšเบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ N เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบญเปˆเบฒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เป€เบ•เบฑเบก (เบžเบฝเบ‡เปเบ•เปˆ M + log (N) nodes), เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบเบฒเบ™เปƒเบŠเป‰เปเบœเปˆเบ™เบซเบ™เป‰เบญเบเบฅเบปเบ‡. เบ–เป‰เบฒ M เปเบกเปˆเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ™เป‰เบญเบ (เบ•เบปเบงเบขเปˆเบฒเบ‡ 200 เปเบ–เบง) เปเบฅเบฐ N เปเบกเปˆเบ™เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ (1 เปเบ–เบง), เบˆเบฐเบกเบตเบ„เบงเบฒเบกเปเบ•เบเบ•เปˆเบฒเบ‡เบ—เบตเปˆเปƒเบซเบเปˆเบซเบผเบงเบ‡.

เปเบ•เปˆเบกเบตเบšเบฑเบ™เบซเบฒเปƒเบซเบกเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰ (เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡!). เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบžเบตเปˆเบกเบซเบผเบทเบฅเบถเบšเปเบ–เบงเปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™ (เปเบฅเบฐเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบขเบนเปˆเปƒเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบต B+Tree เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡):

  • เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบฎเบฑเบเบชเบฒเบฅเบฐเบšเบฝเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡ nodes เบžเบฒเบเปƒเบ™ B+Tree, เบ–เป‰เบฒเบšเปเปˆเบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ—เปˆเบฒเบ™เบˆเบฐเบšเปเปˆเบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒ nodes เบžเบฒเบเปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบˆเบฑเบ”เบฎเบฝเบ‡.
  • เบ—เปˆเบฒเบ™โ€‹เบ•เป‰เบญเบ‡โ€‹เบฎเบฑเบโ€‹เบชเบฒโ€‹เบˆเปเบฒโ€‹เบ™เบงเบ™โ€‹เบ•เปเบฒโ€‹เปˆโ€‹เบชเบธเบ”โ€‹เบ—เบตเปˆโ€‹เบ‚เบญเบ‡โ€‹เบฅเบฐโ€‹เบ”เบฑเบšโ€‹เบ—เบตเปˆโ€‹เป€เบ›เบฑเบ™โ€‹เป„เบ›โ€‹เป„เบ”เป‰โ€‹เปƒเบ™ B+Tree, เบ–เป‰เบฒโ€‹เบšเปเปˆโ€‹เบ”เบฑเปˆเบ‡โ€‹เบ™เบฑเป‰เบ™ O(log(N)) เบ„เบงเบฒเบกโ€‹เบชเบฑเบšโ€‹เบชเบปเบ™โ€‹เบˆเบฐโ€‹เบเบฒเบโ€‹เป€เบ›เบฑเบ™ O(N).

เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, B + Tree เบ•เป‰เบญเบ‡เป€เบ›เบฑเบ™เบ„เปเบฒเบชเบฑเปˆเบ‡เบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡เปเบฅเบฐเบกเบตเบ„เบงเบฒเบกเบชเบปเบกเบ”เบนเบ™. เป‚เบŠเบเบ”เบต, เบ™เบตเป‰เป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰เบ”เป‰เบงเบเบเบฒเบ™เบฅเบถเบšเบญเบฑเบ”เบชเบฐเบฅเบดเบเบฐ เปเบฅเบฐเปƒเบชเปˆเบ„เบณเบชเบฑเปˆเบ‡. เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ: เบเบฒเบ™เปƒเบชเปˆเปเบฅเบฐเบเบฒเบ™เบฅเบถเบšเปƒเบ™ B+ tree cost O(log(N)). เบ”เป‰เบงเบเป€เบซเบ”เบ™เบตเป‰ เบšเบฒเบ‡เบ„เบปเบ™เปƒเบ™เบžเบงเบเบ—เปˆเบฒเบ™เบˆเบถเปˆเบ‡เป„เบ”เป‰เบเบดเบ™เปเบ™เบงเบ™เบฑเป‰เบ™ เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบ”เบฑเบ”เบชเบฐเบ™เบตเบซเบผเบฒเบเป€เบเบตเบ™เป„เบ›เบšเปเปˆเปเบกเปˆเบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบ”เบต. เปเบ—เป‰, เบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบŠเป‰เบฒเบฅเบปเบ‡เป„เบงเปเบŠเบ / เบ›เบฑเบšเบ›เบธเบ‡ / เบฅเบปเบšเปเบ–เบงเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ›เบฑเบšเบ›เบธเบ‡เบ”เบฑเบ”เบชเบฐเบ™เบตเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” O(Log(N)) เบฅเบฒเบ„เบฒเปเบžเบ‡เบชเปเบฒเบฅเบฑเบšเปเบ•เปˆเบฅเบฐเบ”เบฑเบ”เบชเบฐเบ™เบต. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบเบฒเบ™เป€เบžเบตเปˆเบกเบ”เบฑเบ”เบชเบฐเบ™เบตเบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบกเบตเบงเบฝเบเบซเบผเบฒเบเบชเปเบฒเบฅเบฑเบš เบœเบนเป‰เบˆเบฑเบ”เบเบฒเบ™เบ—เบธเบฅเบฐเบเปเบฒ (เบˆเบฐเบญเบฐเบ—เบดเบšเบฒเบเปƒเบ™เบ•เบญเบ™เบ—เป‰เบฒเบเบ‚เบญเบ‡เบšเบปเบ”เบ„เบงเบฒเบก).

เบชเปเบฒเบฅเบฑเบšเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบšเบปเบ”เบ„เบงเบฒเบก Wikipedia เบเปˆเบฝเบงเบเบฑเบš B+เบ•เบปเป‰เบ™เป„เบกเป‰. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ” B + Tree เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™, เป€เบšเบดเปˆเบ‡ เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹เบ™เบตเป‰ ะธ เบซเบปเบงโ€‹เบ‚เปเป‰โ€‹เบ™เบตเป‰ เบˆเบฒเบเบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒ MySQL เบŠเบฑเป‰เบ™เบ™เปเบฒ. เบžเบงเบเป€เบ‚เบปเบฒเบ—เบฑเบ‡เบชเบญเบ‡เบชเบธเบกเปƒเบชเปˆเบงเบดเบ—เบตเบเบฒเบ™ InnoDB (เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบ MySQL) เบˆเบฑเบ”เบเบฒเบ™เบเบฑเบšเบ”เบฑเบ”เบชเบฐเบ™เบต.

เบซเบกเบฒเบเป€เบซเบ”: เบœเบนเป‰เบญเปˆเบฒเบ™เบšเบญเบเบ‚เป‰เบญเบเบงเปˆเบฒ, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบเบฒเบ™เป€เบžเบตเปˆเบกเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเปƒเบ™เบฅเบฐเบ”เบฑเบšเบ•เปˆเปเบฒ, เบ•เบปเป‰เบ™เป„เบกเป‰ B + เบ„เบงเบ™เบกเบตเบ„เบงเบฒเบกเบชเบปเบกเบ”เบนเบ™เบขเปˆเบฒเบ‡เบชเบปเบกเบšเบนเบ™.

Hasshable

เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบชเบธเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบกเปˆเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบซเบผเบฒเบเป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบŠเบญเบเบซเบฒเบ„เปˆเบฒเบขเปˆเบฒเบ‡เป„เบงเบงเบฒ. เบเบดเปˆเบ‡เป„เบ›เบเบงเปˆเบฒเบ™เบฑเป‰เบ™, เบ„เบงเบฒเบกเป€เบ‚เบปเป‰เบฒเปƒเบˆเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบˆเบฐเบŠเปˆเบงเบเปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบ‚เบปเป‰เบฒเปƒเบˆเปƒเบ™เบžเบฒเบเบซเบฅเบฑเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบกเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบปเปˆเบงเป„เบ›เบ—เบตเปˆเป€เบญเบตเป‰เบ™เบงเปˆเบฒ hash join ( hash เป€เบ‚เบปเป‰เบฒเบฎเปˆเบงเบก). เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ™เบตเป‰เบเบฑเบ‡เบ–เบทเบเปƒเบŠเป‰เป‚เบ”เบเบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เป€เบžเบทเปˆเบญเป€เบเบฑเบšเบšเบฒเบ‡เบชเบดเปˆเบ‡เบžเบฒเบเปƒเบ™ (e.g. เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบฅเบฑเบญเบ เบซเบผเบท เบชเบฐเบ™เบธเบเป€เบเบต buffer, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบซเบฑเบ™เบ—เบฑเบ‡เบชเบญเบ‡เปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบ•เปเปˆเบกเบฒ).

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เปเบกเปˆเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป„เบงเบŠเบญเบเบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเป‚เบ”เบเบเบธเบ™เปเบˆเบ‚เบญเบ‡เบกเบฑเบ™. เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash, เบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบเปเบฒเบ™เบปเบ”:

  • เบ‚เปเป‰เบ„เบถเบ” เบชเปเบฒเบฅเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ‚เบญเบ‡เบ—เปˆเบฒเบ™
  • เบŸเบฑเบ‡เบŠเบฑเบ™ hash เบชเปเบฒเบฅเบฑเบšเบเบฐเปเบˆ. hashes เบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบ—เบตเปˆเบ„เบดเบ”เป„เบฅเปˆเปƒเบซเป‰เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบš (เป€เบญเบตเป‰เบ™เบงเปˆเบฒ เบžเบฒเบเบชเปˆเบงเบ™ ).
  • เบŸเบฑเบ‡เบŠเบฑเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ„เบต. เป€เบกเบทเปˆเบญเบ—เปˆเบฒเบ™เป„เบ”เป‰เบžเบปเบšเป€เบซเบฑเบ™เบชเปˆเบงเบ™เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡, เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒเบžเบฒเบเปƒเบ™เบชเปˆเบงเบ™เป‚เบ”เบเปƒเบŠเป‰เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ™เบตเป‰.

เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเป†

เบ‚เปเปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™:

เบงเบดเบ—เบตเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡ (เบชเปˆเบงเบ™ 1)

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบ™เบตเป‰เบกเบต 10 เบžเบฒเบเบชเปˆเบงเบ™. เป€เบžเบฒเบฐเบงเปˆเบฒเบ‚เป‰เบญเบเบ‚เบตเป‰เบ„เป‰เบฒเบ™, เบ‚เป‰เบญเบเบ–เปˆเบฒเบเบฎเบนเบšเบžเบฝเบ‡เปเบ•เปˆ 5 เบชเปˆเบงเบ™, เปเบ•เปˆเบ‚เป‰เบญเบเบฎเบนเป‰เบงเปˆเบฒเป€เบˆเบปเป‰เบฒเบชเบฐเบซเบฅเบฒเบ”, เบชเบฐเบ™เบฑเป‰เบ™เบ‚เป‰เบญเบเบˆเบฐเปƒเบซเป‰เป€เบˆเบปเป‰เบฒเบ–เปˆเบฒเบเบฎเบนเบšเบญเบตเบ 5 เบชเปˆเบงเบ™เบ‚เบญเบ‡เป€เบˆเบปเป‰เบฒเป€เบญเบ‡. เบ‚เป‰เบญเบเปƒเบŠเป‰ hash function modulo 10 เบ‚เบญเบ‡เบเบธเบ™เปเบˆ. เปƒเบ™เบ„เปเบฒเบชเบฑเบšเบ•เปˆเบฒเบ‡เป†เบญเบทเปˆเบ™เป†, เบ‚เป‰เบฒเบžเบฐเป€เบˆเบปเป‰เบฒเป€เบเบฑเบšเบฎเบฑเบเบชเบฒเบžเบฝเบ‡เปเบ•เปˆเบ•เบปเบงเป€เบฅเบเบชเบธเบ”เบ—เป‰เบฒเบเบ‚เบญเบ‡เบเบธเบ™เปเบˆเบ‚เบญเบ‡เบญเบปเบ‡เบ›เบฐเบเบญเบšเป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบชเปˆเบงเบ™เบ‚เบญเบ‡เบกเบฑเบ™:

  • เบ–เป‰เบฒเบ•เบปเบงเป€เบฅเบเบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ 0, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ•เบปเบเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™ 0,
  • เบ–เป‰เบฒเบ•เบปเบงเป€เบฅเบเบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ 1, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ•เบปเบเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™ 1,
  • เบ–เป‰เบฒเบ•เบปเบงเป€เบฅเบเบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™ 2, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ•เบปเบเบขเบนเปˆเปƒเบ™เบžเบทเป‰เบ™เบ—เบตเปˆ 2,
  • ...

เบŸเบฑเบ‡เบŠเบฑเบ™เบเบฒเบ™เบ›เบฝเบšเบ—เบฝเบšเบ—เบตเปˆเบ‚เป‰เบญเบเปƒเบŠเป‰เปเบกเปˆเบ™เบžเบฝเบ‡เปเบ•เปˆเบ„เบงเบฒเบกเบชเบฐเป€เบซเบกเบตเบžเบฒเบšเบฅเบฐเบซเบงเปˆเบฒเบ‡เบชเบญเบ‡เบˆเปเบฒเบ™เบงเบ™เป€เบ•เบฑเบก.

เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบญเบปเบ‡เบ›เบฐเบเบญเบš 78:

  • เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบ„เบดเบ”เป„เบฅเปˆเบฅเบฐเบซเบฑเบ” hash เบชเปเบฒเบฅเบฑเบš 78, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™ 8.
  • เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เป€เบšเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™ 8, เปเบฅเบฐเบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบกเบฑเบ™เบžเบปเบšเปเบกเปˆเบ™ 78.
  • เบ™เบฒเบ‡เบชเบปเปˆเบ‡เบ„เบทเบ™เบฅเบฒเบเบเบฒเบ™ 78 เปƒเบซเป‰เบ—เปˆเบฒเบ™
  • เบเบฒเบ™เบŠเบญเบเบซเบฒเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบžเบฝเบ‡เปเบ•เปˆ 2 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™ (เบซเบ™เบถเปˆเบ‡เป€เบžเบทเปˆเบญเบ„เบดเบ”เป„เบฅเปˆเบ„เปˆเบฒ hash เปเบฅเบฐเบญเบตเบเบญเบฑเบ™เบซเบ™เบถเปˆเบ‡เป€เบžเบทเปˆเบญเบŠเบญเบเบซเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบšเบžเบฒเบเปƒเบ™เบชเปˆเบงเบ™).

เบ”เบฝเบงเบ™เบตเป‰, เปƒเบซเป‰เป€เบงเบปเป‰เบฒเบงเปˆเบฒเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบญเบปเบฒเบญเบปเบ‡เบ›เบฐเบเบญเบš 59:

  • เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบ„เบดเบ”เป„เบฅเปˆเบฅเบฐเบซเบฑเบ” hash เบชเปเบฒเบฅเบฑเบš 59, เป€เบŠเบดเปˆเบ‡เปเบกเปˆเบ™ 9.
  • เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบ„เบปเป‰เบ™เบซเบฒเบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™ 9, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เปเบฒเบญเบดเบ”เบ—เบตเปˆเบžเบปเบšเปเบกเปˆเบ™ 99. เบ™เบฑเบšเบ•เบฑเป‰เบ‡เปเบ•เปˆ 99!=59, เบญเบปเบ‡เบ›เบฐเบเบญเบš 99 เบšเปเปˆเปเบกเปˆเบ™เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.
  • เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เป€เบซเบ”เบœเบปเบ™เบ”เบฝเบงเบเบฑเบ™, เบญเบปเบ‡เบ›เบฐเบเบญเบšเบ—เบตเบชเบญเบ‡ (9), เบ—เบตเบชเบฒเบก (79), ... , เบชเบธเบ”เบ—เป‰เบฒเบ (29) เบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”.
  • เบšเปเปˆเบžเบปเบšเบญเบปเบ‡เบ›เบฐเบเบญเบš.
  • เบเบฒเบ™เบ„เบปเป‰เบ™เบซเบฒเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ 7 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™.

เบŸเบฑเบ‡เบŠเบฑเบ™ hash เบ”เบต

เบ”เบฑเปˆเบ‡เบ—เบตเปˆเป€เบˆเบปเป‰เบฒเบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰, เบ‚เบถเป‰เบ™เบเบฑเบšเบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เบŠเบญเบเบซเบฒ, เบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเปเบกเปˆเบ™เบšเปเปˆเบ„เบทเบเบฑเบ™!

เบ–เป‰เบฒเบ•เบญเบ™เบ™เบตเป‰เบ‚เป‰เบญเบเบ›เปˆเบฝเบ™ modulo เบŸเบฑเบ‡เบŠเบฑเบ™ hash 1 เบ‚เบญเบ‡เบเบธเบ™เปเบˆ (เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เป€เบญเบปเบฒ 000 เบ•เบปเบงเป€เบฅเบเบชเบธเบ”เบ—เป‰เบฒเบ), เบเบฒเบ™เบŠเบญเบเบซเบฒเบ—เบตเบชเบญเบ‡เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบเบžเบฝเบ‡เปเบ•เปˆ 000 เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบšเปเปˆเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™ segment 6. เบชเบดเปˆเบ‡เบ—เป‰เบฒเบ—เบฒเบเบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบŠเบญเบเบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ hash เบ—เบตเปˆเบ”เบตเบ—เบตเปˆเบˆเบฐเบชเป‰เบฒเบ‡เบ–เบฑเบ‡เบ—เบตเปˆเบกเบตเบญเบปเบ‡เบ›เบฐเบเบญเบšเบˆเปเบฒเบ™เบงเบ™เบซเบ™เป‰เบญเบเบซเบผเบฒเบ.

เปƒเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡เบ‚เป‰เบญเบ, เบŠเบญเบเบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ hash เบ—เบตเปˆเบ”เบตเปเบกเปˆเบ™เบ‡เปˆเบฒเบ. เปเบ•เปˆเบ™เบตเป‰เปเบกเปˆเบ™เบ•เบปเบงเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‡เปˆเบฒเบเบ”เบฒเบ, เบเบฒเบ™เบŠเบญเบเบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ hash เบ—เบตเปˆเบ”เบตเปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบซเบผเบฒเบเป€เบกเบทเปˆเบญเบชเปเบฒเบ„เบฑเบ™เบ„เบท:

  • string (เบ•เบปเบงเบขเปˆเบฒเบ‡ - เบ™เบฒเบกเบชเบฐเบเบธเบ™)
  • 2 เปเบ–เบง (เบ•เบปเบงเบขเปˆเบฒเบ‡ - เบ™เบฒเบกเบชเบฐเบเบธเบ™ เปเบฅเบฐเบ™เบฒเบกเบชเบฐเบเบธเบ™)
  • 2 เปเบ–เบง เปเบฅเบฐ เบงเบฑเบ™เบ—เบต (เบ•เบปเบงเบขเปˆเบฒเบ‡ - เบ™เบฒเบกเบชเบฐเบเบธเบ™, เบŠเบทเปˆ เปเบฅเบฐ เบงเบฑเบ™เป€เบ”เบทเบญเบ™เบ›เบตเป€เบเบตเบ”)
  • ...

เบ”เป‰เบงเบเบŸเบฑเบ‡เบŠเบฑเบ™ hash เบ—เบตเปˆเบ”เบต, เบเบฒเบ™เบŠเบญเบเบซเบฒเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบกเบตเบ„เปˆเบฒเปƒเบŠเป‰เบˆเปˆเบฒเบ O(1).

Array เบ—เบฝเบšเบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash

เป€เบ›เบฑเบ™เบซเบเบฑเบ‡เบšเปเปˆเปƒเบŠเป‰ array?

Hmm, เบ„เปเบฒเบ–เบฒเบกเบ—เบตเปˆเบ”เบต.

  • เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash เบชเบฒเบกเบฒเบ”เป€เบ›เบฑเบ™ เป‚เบซเบผเบ”เบšเบฒเบ‡เบชเปˆเบงเบ™เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ, เปเบฅเบฐเบžเบฒเบเบชเปˆเบงเบ™เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเบชเบฒเบกเบฒเบ”เบเบฑเบ‡เบ„เบปเบ‡เบขเบนเปˆเปƒเบ™เปเบœเปˆเบ™.
  • เบ”เป‰เบงเบ array เบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เปƒเบŠเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบ•เบดเบ”เบ•เปเปˆเบเบฑเบ™เปƒเบ™เบซเบ™เปˆเบงเบเบ„เบงเบฒเบกเบˆเปเบฒ. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบเปเบฒเบฅเบฑเบ‡เป‚เบซเบฅเบ”เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆ เบกเบฑเบ™เป€เบ›เบฑเบ™เบเบฒเบ™เบเบฒเบเบซเบผเบฒเบเบ—เบตเปˆเบˆเบฐเบŠเบญเบเบซเบฒเบžเบทเป‰เบ™เบ—เบตเปˆเบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เบžเบฝเบ‡เบžเป.
  • เบชเปเบฒเบฅเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบฅเบทเบญเบเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™ (เบ•เบปเบงเบขเปˆเบฒเบ‡, เบ›เบฐเป€เบ—เบ”เปเบฅเบฐเบ™เบฒเบกเบชเบฐเบเบธเบ™เบ‚เบญเบ‡เบšเบธเบเบ„เบปเบ™).

เบชเปเบฒเบฅเบฑเบšเบ‚เปเป‰เบกเบนเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบญเปˆเบฒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบเปˆเบฝเบงเบเบฑเบš JavaHashMap, เป€เบŠเบดเปˆเบ‡เป€เบ›เบฑเบ™เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบกเบตเบ›เบฐเบชเบดเบ”เบ—เบดเบžเบฒเบšเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡ hash; เบ—เปˆเบฒเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป€เบ‚เบปเป‰เบฒเปƒเบˆ Java เป€เบžเบทเปˆเบญเป€เบ‚เบปเป‰เบฒเปƒเบˆเปเบ™เบงเบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเบเบงเบกเป€เบญเบปเบฒเปƒเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™