MSD Radix sort
LSD Radix sort'da string key'larni öngdan çapga tartiblab borgan edik. Albatta, çapdan öngga ham tartiblab borişning ham imkoni bor. Buning uçun röyhatdagi key'larning boş harfi (belgisi) böyiça tartiblaymiz (Key indexed counting). Keyin rekursiyada key indexed counting ajratgan har bir guruhni alohida-alohida tartiblaymiz. MSD Radix sort algoritmi şu tariqa işlaydi.
MSD Radix sort işlaş tartibi
Işlaş tartibini misol bilan körib çiqamiz. Bizda quyidagi röyhat bor bölsin:
| i | key |
|---|---|
| 0 | dab |
| 1 | add |
| 2 | cab |
| 3 | fad |
| 4 | fee |
| 5 | bad |
| 6 | dad |
| 7 | bee |
| 8 | fed |
| 9 | bed |
| 10 | ebb |
| 11 | ace |
Key indexed counting algoritmini qöllaganimizdan keyin:
| i | key |
|---|---|
| 0 | add |
| 1 | ace |
| 2 | bad |
| 3 | bee |
| 4 | bed |
| 5 | cab |
| 6 | dab |
| 7 | dad |
| 8 | edd |
| 9 | fad |
| 10 | fee |
| 11 | fed |
count[] array'da boş harflar quyidagiça guruhlangan böladi:
[ ... 0, // a 2, // b 5, // c 6, // d 8, // e 9, // f 12, // - ... ]
Har bir guruhni alohida-alohida tartiblaymiz. Masalan a guruhida add, ace, b guruhida bad, bee, bed, va hokazo.
MSD Radix sort ning LSD sort'dan ustun tarafi - MSD turli xil uzunlikdagi strinğlarni ham tartiblay oladi.
Kod
MSD Radix sort'ning kamçiliklari
- Agar kodni debug qilib körgan bölsangiz,
count[]ga har safar R=128 böş (0) element berilyapti. Demak har safar ortiqça resurs band qilinyapti. Aslida biz key uçun alphanumeric belgilardan foydalansak, bizga R=62 siğimlicount[]ham kifoya qilardi. Agar faqat kiçik (yoki faqat katta) harflardan foydalansak, R=36 bölişi yetarli. Şuning uçun, algoritmdan foydalanganda key'dagi belgilarni aniqlab oladigan bölsak, bu bizga kodning tezroq işlaşiga yordam beradi. - Ikkinçi kamçilik - rekursiya işlayotganda juda köp kiçik
aux[]array'lar paydo bölib, ular alohida-alohida tartiblanyapti. Kiçik array'lar uçun insertion sort'ni qöllab, kod işlaşini optimallaştiriş mumkin. - MSD key'lardagi har bir belgini soliştirib çiqqani uçun, bir xil key'larda (duplicate keys) yomon natija körsatadi, çunki bu holda bir xil key'larning har bir belgisini ohirigaça soliştirib çiqadi.
Keyingi mavzuda biz MSD Radix sort'ni Quicksort bilan birga qöllab uni optimallaştirişga urinamiz.