Tema
/
Algoritmai ir duomenų struktūros GO
Pamoka 8 / 15 Efektyvus rūšiavimas ~60 min
Teorija

Kodėl log n

Septinta pamoka baigėsi pusantros minutės burbuliukų rikiavimo šimtui tūkstančių įrašų — ir vienu rezultatu, kurio nesitikėjai: įterpimo rikiavimas beveik tvarkingiems duomenims aplenkė visus.

Ši pamoka pakeičia patį metodą. Iš O(n²) į O(n log n), ir su tuo pačiu šimtu tūkstančių įrašų skirtumas bus dviejų šimtų kartų.

Kodėl log n

Skaidyk masyvą pusiau, pusiau, pusiau — kiek kartų, kol liks po vieną? log₂ n kartų. 100 000 įrašų — septyniolika padalijimų.

Kiekviename gylyje sutvarkomi visi n elementai, tad viso darbo n·log₂ n. Šimtui tūkstančių tai maždaug 1,7 milijono vietoj penkių milijardų.

Tas pats skaičius, kurį matei šeštoje pamokoje: dvejetainė paieška surado įrašą per 17 palyginimų, nes 2¹⁷ > 100 000. Ta pati riba, kitas pritaikymas.

Ką pastatysi

Du algoritmus, ir jie skiriasi labiau nei atrodo:

  • suliejimo rikiavimas — stabilus, neturi blogo atvejo, bet reikalauja antro masyvo;
  • greitasis rikiavimas — vietoje, dažniausiai greitesnis, nestabilus, ir su neteisingu pivotu grįžta į O(n²).

Trys iš šių savybių turės pasekmių, kurias pamatuosi: stabilumas 5 ir 6 žingsniuose, pivotas — 7.

Kas lieka kaip septintoje

Karkasas dešinėje, algoritmai tekste ir pseudokode, testas — nuosprendis. dcsort.go bus tavo.