Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 10. 01. 2012 17:29

DeMidix
Příspěvky: 63
Reputace:   
 

..Složitost vkladani/odebiráni

Zdravím,

Chtěl bych se zeptat jaká je složitost vkládáni do souboru a čteni ze souboru u seřazeného pole.

Děkují

Offline

 

#2 10. 01. 2012 17:37

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: ..Složitost vkladani/odebiráni

Ahoj,

dvojkový logaritmus počtu záznamů, můžeš použít metodu půlení intervalů


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#3 10. 01. 2012 17:43

DeMidix
Příspěvky: 63
Reputace:   
 

Re: ..Složitost vkladani/odebiráni

dvojkový log počtu záznamů jak u čtení tak i u zápisu?

A metodu půleni intrvalu bych mohl použit jak, nebo co si mam pod tim představit v tomhle připadě?

Děkují

Offline

 

#4 10. 01. 2012 19:58

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: ..Složitost vkladani/odebiráni

Ano, čtení i zápis - u zápisu máš ještě další operaci, a to udělat si "mezeru" v tom souboru, něco samozřejmě stojí fyzické čtení souboru i zápis do něj, ale uvažujme-li "algoritmus který umí najít nějaký záznam v setříděném kontejneru, nebo zapsat záznam do kontejneru bez narušení setříděnosti, tak pak je složitost toho algorimu logaritmická...

A půlení intervalu - funguje to takto (dám triviální příklad)

Mějme setřídené pole o 100 prvcích, ve kterém je uložená posloupnost čísel 0 - 99.

Chceme najít index prvku, ve kterém je uloženo číslo 14, například - tak zpracuješ:

půlka ze 100 je 50. Test, zda hodnota na indexu 50 je rovná, větší, nebo menší než hledaná. V našem případě 49 > 14
Máme jistotu, že v "horní polovině" hledaný prvek nebude
půlka z 50 je 25. Je 14 = 24? není, je 14 > 24 není. Je 14 < 24? Je. Takže použijeme zase levou půlku intervalu

Půlka z 25 je 12 (dělím CELOČÍSELNĚ). Na té je uloženo 13. Testy: 14 = 13? 14 > 13? Je. Použijeme pravou polovinu, interval 13 - 25, tam hledaný prvek bude.
Půlicí bod bude 12+6 (18). Testy, 17 > 13, takže zase levá strana (12 - 17)
Zase půlka, 15.. 16>14 - zase levá strana, (12-15). Zase půlka - 13. 14 = 14 - Nalezeno. Tím jsme zjisitili, že se hledaná hodnota nalézá na indexu [13]. Takhle to vypadá složitě, ale algoritmovat je to strašně jednoduché, přičemž kritéria můžou být jakákoli (samozřejmě, stejně tak kritéria, podle kterého je to pole nebo jiný datový kontejner tříděný.

Tolik ke složitosti hledacího algoritmu, a ty I/O věci bych asi v tomto úkolu neřešil (já bych si nahrál celé pole do paměti, provedl na něm vložení (posun všeho za záznamem, kam má přijít, doprava), soubor bych trunknul a napsal obsah paměti) - za předpokladu, že je to pole dostatečně malé - pro velké objemy dat se nehodí třídění pole, ale spíše zápis "za sebe" s tím, že se to pak setřídí, a nakonec pole není zrovna vhodný typ na setříděná data (velká data). Ale takto bychom mohli filozofovat do noci :)


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

#5 12. 01. 2012 10:05

DeMidix
Příspěvky: 63
Reputace:   
 

Re: ..Složitost vkladani/odebiráni

Díky za radu.

Chtěl bych se ještě zeptat jaka by byla složitost vyhledáváni v tomto seřazeném poli?

Díky

Offline

 

#6 12. 01. 2012 10:11

frank_horrigan
Příspěvky: 938
Reputace:   31 
 

Re: ..Složitost vkladani/odebiráni

:) Od začátku jsme se bavili o vyhledávání :) (tedy že chceš přečíst nějaký konkrétní prvek z konkrétního místa (které musíš najít) nebo zapsat na konkrétní místo - tedy které musíš najít :)

Prosté čtení a prostý zápis bez hledání má složitost lineární


The only thing worse than being wrong is staying wrong
Sun Tzu - The Art of War

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson