[JÄRGMINE] Infoandmed
[EELMINE] Arvud
[SISUKORD]
[ENGLISH]


8 SORTIMINE

Sortimine on infosüsteemide levinuim operatsioon. Erinevates rakendustes kasutatakse erinevaid sortimisalgoritme. Sortimine põhineb märkidele omistatud kaaludel. Eestikeelsetes tekstides kasutame viit tüüpi kaalusid:

AW -- Tähtede ja numbrite kaal (Cultural Alphanumeric Weight). Kaal omab väärtusi ainult tähtede ja numbrite jaoks. Ülejäänud märgid, näiteks kirjavahemärgid ei oma kaalu. Neid märke arvestatakse sortimisel vähemkaalukaina. Suur- ja väiketähtede kaalud on võrdsed. Eesti tähestikku mittekuuluvatel diakriitikuga tähtedel on reeglina sama kaal, mis vastaval diakriitikuta tähel: näiteks à, A, ja a AW-kaal on 91. Vastavalt rahvusvahelistele kokkulepetele on ladina tähtede jaoks reserveeritud kaalud vahemikus 91-132.

DW -- Diakriitiku kaal (Cultural Diacritic Weight). Diakriitikutega märke sisaldavaid tekste järjestatakse eesti keeles esimesel lähendusel samamoodi kui diakriitikuta tekste. Kahe sama prototüübiga diakriitikuga tähe (näiteks ã ja à) võrdlemiseks tuleb märkidele omistada DW-kaal. Ladina tähestikus kasutatakse vastavalt rahvusvahelistele kokkulepetele järgmisi kaale:

32	Diakriitikuta märk (no diacritic)
33	Märgi teisend (variant)
34	Liitmärk (ligature)
35	Akuut (acute)
36	Graavis (grave)
37	Kaar (breve)
38	Tsirkumfleks (circumflex)
39	Linnuke (caron, hacek)
40	Ülasõõr (overcircle)
41	Treema, täpid (diaresis or umlaut)
42	(diaresis and acute)
43	Topeltakuut (double acute)
44	Tilde (tilde)
45	Ülapunkt (overdot)
46	Ülakriips (macron)
47	Reserveeritud
48	Punkt keskel (middle dot)
49	Kaldkriips (stroke)
50	Sedii (cedilla)
51	Pöördsedii (ogonek)
52	Alapunkt (underdot)
53	Alakriips (underline)
54	Reserveeritud
CW -- Kultuurile omane registrikaal (Cultural Case Weight). Eesti keele jaoks rakendatakse ladina tähestikuga maades standardselt kasutatavaid kaale:

1	Reserveeritud
2	Reserveeritud	
3	Väiketähed, numbrid ja ülejäänud kirjamärgid
4	Väiketähed ja numbrid indeksina
5	Väiketähed ja numbrid ülaindeksina
6	Reserveeritud
7	Suurtähed
8	Suurtähed indeksina
9	Suurtähed ülaindeksina
11	Murdarv 1/8
12	Murdarv 1/4
13	Murdarv 3/8
14	Murdarv 1/2
15	Murdarv 5/8
16	Murdarv 3/4
17	Murdarv 7/8
18	Reserveeritud
SW -- Erimärkide kaal (Cultural Special Weight)

Eesti tähestikus numbritel ja tähtedel SW-kaal puudub. SW-kaal on ülejäänud märkidel. SW-kaal tagab erimärke sisaldavate tekstide omavahelise järjestuse.

SH -- Jaoskaal (Shared Weight).

Eesti keele jaoks SH-kaal on lähedane AW-kaalule. Erinevused on erimärkide ja tähe ß puhul. SH-kaal ei taga seega korrektset järjestust.

Tekstide järjestamiseks on kasutusel neli viisi. Koigis neis moodustatakse teksti põhjal ülalkirjeldatud kaale kasutades sortimisvõti. Tekstide järjestus määratakse sortimisvõtmete leksikograafilise järjestusega.

I. Ainukaaludega sortimisvõti.
Meetod tagab "kiire ja räpaka" järjestuse. Igale märgile omistatakse järjestikku kaal 0-st (SP) kuni 190-ni.
II. Jaoskaaluga sortimisvõti.
Meetod tagab üsna täpse järjestuse. Igale märgile omistatakse SH-kaal vastavalt tabeli 8.1 viimasele veerule.
III. Tekstivõti.
Meetod tagab Eesti keelenõuetele täpselt vastava järjestuse. Võti moodustakse järgmiselt.
  1. Moodustatakse AW-kaaludele vastav string. Iga märgi AW-kaal võetakse tabelist 8.1 (veerg AW). Nii on sõna "Co-op" AW-string X'5E707072', sõnal "coté" X'5E707761'.
  2. Moodustatakse esialgne DW-string. Iga märgi DW-kaal võetakse tabelist 8.1 (veerg DW). Sõna "Co-op" algne DW-string on X'20202020', sõnal "coté" X'20202023'.
  3. Algne DW-string pööratakse ümber.
  4. Saadud stringist eemaldatakse stringi lõpust alates ettepoole koodid kuni esimese X'20'-st erineva koodini. Lõplik DW-string sõnal "Co-op" on X'', sõnal "coté" X'23'. Antud samm pole kohustuslik.
  5. Moodustatakse esialgne CW-string. Iga märgi kaal võetakse tabelist 8.1 (veerg CW). Sõna "Co-op" algne CW-string on X'07030303', sõnal "coté" X'03030303'.
  6. Saadud stringist eemaldatakse stringi lõpust alates ettepoole koodid kuni esimese X'03'-st erineva koodini. Lõplik CW-string sõnal "Co-op" on X'07', sõnal "coté" X''. Antud samm pole kohustuslik.
  7. Moodustatakse SW-kaaludele vastav string. Iga märgi SW-kaal võetakse tabelist 8.1 (veerg SW). Kui tabelis vastaval märgil puudub SW-kaal, siis vastav märk jäetakse vahele. Igale mittetühja SW kaalu ette lisatakse märgi positsioon (järjenumber) tekstis. Nii on sõna "Co-op" SW-string X'0307' (märk "-" positsioonis 3), sõnal "coté" X''.
  8. Tekstivõti moodustatakse stringidest AW-string, DW-string, CW-string, X'00', SW-string. Nii saame sõnale "Co-op" tekstivõtme X'5E70707207000307', sõnale "coté" X'5E7077612300'.
IV. Stringivõti.
Meetod tagab mõnedes rakendustes (kus on vaja arvestada erimärke, teksti jaotust veergudesse jms) mugavama järjestuse. Siin kasutatakse esimese võtmena SH-stringi, välja on jäetud SW- string. Võtme moodustamine toimub järgmiste etappidena.
  1. Moodustatakse SH-kaaludele vastav string. Iga märgi SH-kaal võetakse tabelist 8.1 (veerg SH). Nii on sõna "Co-op" SH-string X'4854055455' sõnal "coté" X'4854594A'.
  2. Moodustatakse algne DW-string. Iga märgi DW-kaal võetakse tabelist 8.1 (veerg DW). Sõna "Co-op" algne DW-string on X'20202020', sõnal "coté" X'20202023'.
  3. Algne DW-string pööratakse ümber.
  4. Saadud stringist eemaldatakse stringi lõpust alates ettepoole koodid kuni esimese X'20'-st erineva koodini. Lõplik DW-string sõnal "Co-op" on X'', sõnal "coté" X'23'.
  5. Moodustatakse algne CW-string. Iga märgi kaal võetakse tabelist 8.1 (veerg CW). Sõna "Co-op" algne CW-string on X'07030303', sõnal "coté" X'03030303'.
  6. Saadud stringist eemaldatakse alates stringi algusest koodid kuni esimese X'03'-st erineva koodini. Lõplik CW-string sõnal "Co-op" on X'07', sõnal "coté" X''.
  7. SW-stringi ei moodustata.
  8. Stringivoti moodustatakse stringidest SH-string, X'00', DW-string, CW-string. Nii saame sõnale "Co-op" stringivõtme X'48540554550007', sõnale "coté" X'4854594A0023'.

Tabel 8.1 kujutab Eesti sortimisvõtmete tabelit.


[JÄRGMINE] Infoandmed
[EELMINE] Arvud
[SISUKORD]