1 / 14

Vnější řazení, řazení souboru

Vnější řazení, řazení souboru. Řazení sekvenčních souborů Existuje řada metod, např.: Metoda přímého setřiďování Metoda přirozeného setřiďování Mnohocestné vyvážené setřiďování Polyfázové setřiďování. Metoda přímého setřiďování. Princip :

xenia
Download Presentation

Vnější řazení, řazení souboru

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Vnější řazení, řazení souboru • Řazení sekvenčních souborů Existuje řada metod, např.: • Metoda přímého setřiďování • Metoda přirozeného setřiďování • Mnohocestné vyvážené setřiďování • Polyfázové setřiďování

  2. Metoda přímého setřiďování Princip: • Máme základní sekvenční soubor M a vytvoříme dva pomocné sekvenční soubory F1 a F2 – rozdělíme rovnoměrně data z M do F1 a F2: jeden prvek do F1, druhý do F2 atd. • Vezmeme z F1 a F2 po jednom prvku a v seřazené podobě je dáme do M. Takto opakujeme pro všechny prvky. • Uspořádané dvojice rozdělujeme do souboru F1 a F2: první dvojici do F1, druhou do F2 atd. • Z F1 a F2 beru dvojice a v seřazené podobě je dávám do souboru M. Tak to dělám pro všechny dvojice. • Totéž pro uspořádané čtveřice, osmice … K-tice

  3. F1 F1 F1 M M M M M F2 F2 F2 Přímé setřiďování (straight merging)(přímá metoda tří souborů) 1. krok 2. krok … S. krok …

  4. 1. krok 2. krok 3. krok 4. krok ROZDEL(1) ROZDEL(2) ROZDEL(4) ROZDEL(8) 5 8 11 14 1 4 11 11 3 5 6 8 11 12 14 14 5 8 6 3 4 1 7 5 14 6 12 4 11 7 5 8 11 14 3 6 12 3 14 1 4 11 11 7 5 14 8 11 6 12 3 14 4 11 1 11 7 5 14 8 11 6 12 3 14 4 11 1 11 7 3 5 6 8 11 12 14 14 1 4 7 11 11 1 3 4 5 6 7 8 11 11 11 12 14 14 14 11 12 14 11 11 8 11 3 14 1 11 3 6 12 14 7 1 4 7 11 11 SPOJ(1) SPOJ(2) SPOJ(4) SPOJ(8) Počet kroků S: PO:=1; S:=0; while N>PO do begin PO:=PO*2; S:=S+1 end; kde N je počet řazených prvků.

  5. . . type COSI = integer; {typ klicove promenne, napr. ciselny, string, .. } var N, PO, K : word; {N - pocet vet ve zdrojovem souboru M} {PO - rozdeleni do souboru F1 a F2 po PO-ticich} {K - udava velikost PO-tice posledniho rozdeleni M} Procedure ROZDEL(FPO:word); var M, F1, F2 : text; SK, I : word; A : COSI; Procedure SKUP(var FM:text; var FF:text); var J:byte; begin for J:=1 to FPO do begin Readln(FM,A); Writeln(FF,A) end; end; begin assign(M,'ZDROJ.TXT'); reset(M); assign(F1,'CAST1.TXT'); rewrite(F1); assign(F2,'CAST2.TXT'); rewrite(F2); SK:=N div FPO; for I:=1 to SK div 2 do begin SKUP(M,F1); SKUP(M,F2); end; if odd(N div FPO) then begin SKUP(M,F1); while not eof(M) do begin Readln(M,A); Writeln(F2,A) end end else while not eof(M) do begin Readln(M,A); Writeln(F1,A) end; close(M); close(F1); close(F2); end;

  6. begin N:=27; PO:=1; while N>PO do PO:=PO*2; K:=PO div 2; {K-velikost skupiny při posledním} { rozdeleni souboru M} PO :=16; {pro PO=1,2,4 ... K} ROZDEL(PO); . . end.

  7. b) Řazení souborů s přímým přístupem Řazení jiných souborů než souboru typu text, tj. souborů s pevnou délkou věty (řádku, záznamu,…). I když řazení informací přímo v souboru tímto způsobem je zcela neefektivní a iracionální, přesto si jeho řešení dovolíme čtenáři předložit. Nechceme v něm hned v jeho počátečních krocích algoritmizací vzbudit dojem, že by něco „na počítači nešlo“.

  8. Program TRIDSOUB; type JMENO = string[10]; var PR,A,B : JMENO; S : file of JMENO; F : text; I,J,P : byte; begin assign(F,'SOUB.TXT'); reset(F); assign(S,'SOUB.TYP'); rewrite(S); writeln('Opis textového souboru:'); while not eof(F) do begin readln(F,PR); writeln(PR); write(S,PR); end; { je vytvořen netextový soubor S z původního textového souboru F} close(F); close(S); reset(S); P:=0; writeln('Opis typového souboru:'); while not eof (S) do begin read(S,PR); writeln(PR); P:=P+1; end; close(S);

  9. { Textový soubor nelze řadit, lze řadit soubor netextový (typový)} { Poněvadž takový soubor jsem vytvořil - soubor S – řadím {Obyčejná bublinová metoda} for I:=1 to P-1 do begin reset(S); for J:=1 to P-1 do begin read(S,A); read(S,B); if A>B then begin seek(S,filepos(S)-2); write(S,B); write(S,A); end; seek(S,filepos(S)-1); end; close(S); end; { Procedura seek vlastně posouvá v souboru přístupovou} { (tj. čtecí nebo zápisovou hlavu na místo, se kterým chceme "cloumat"} reset(S); writeln('Opis setříděného souboru:'); while not eof(S) do begin read(S,PR); writeln(PR); end; close(S); end.

  10. Uvedený způsob řazení souboru s přímým přístupem je neobvyklý. U rozsáhlých souborů lze řazení realizovat např. tvorbou seznamu - indexového souboru (tabulky), tzv. indexu, obsahující hodnotu primárního klíče a pořadové číslo příslušné věty matričního souboru seřazením tohoto ,,malého“ indexového souboru (tabulky) vyhledáváním v indexovém souboru (tabulce) a následným přístupem k souvisejícímu záznamu do ,,velkého“ souboru

  11. Index – množina dvojic (klic_K, adresa_oblasti_zaznamu_K) je obvykle dostatečně malý, aby se vešel do operační paměti organizován často jako seřazený, aby šlo k záznamům přistupovat efektivně hustý index, obsahující všechny hodnoty klíče vždy použitelný pro primární klíč pro sekundární klíč použitelný jen v případě seřazení matričního souboru podle sekundárního klíče řídký index, neobsahuje všechny hodnoty klíče použitelný jako u sekundárního klíče, pro ryhlejší alokaci výhodné i seřazení indexu (bývá zpravidla standardně)

  12. Implemetace indexu se vejde do operační paměti – řešíme tabulkou (statickou strukturou - polem) Implementace indexu se nevejde do operační paměti – řešíme souborem, tj. strukturou ve vnější paměti hašovanými indexy indexy implementovanými pomocí spojových seznamů (dynamickými strukturami)

  13. Řazení podle klíče, který ne jednoznačně identifikuje příslušný záznam (např. jméno), tj. podle klíče sekundárního, vyžaduje seřazení souboru podle jednotlivých hodnot sekundárního indexu (např. muže a ženy) tvorbou indexového souboru (tabulky), tzv. indexu, obsahující hodnotu sekundárního klíče a pořadové číslo příslušné první věty matričního souboru sekvenční přístup k záznamům s danou hodnotou sekundárního klíče

  14. Při použití sekundárního klíče existuje řada zajímavých metod organizace indexového souboru při malém počtu hodnot sek. klíče (např. (muz,zena)) se z indexové struktury odkazujeme na podsoubory při nevelkém počtu výskytů hodnot sek. klíče v hlavním souboru (např. jmen – Anton, Beata apod.) se odkazujeme na spojový seznam záznamů s příslušným jménem

More Related