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 20. 11. 2010 18:16

VojtechSejkora
Příspěvky: 176
Reputace:   
 

Odebrání prvku v konstantním čase

Dobrý den... potřeboval bych poradit, jak se dá udělat nějaká struktura, do které vložím prvky a jejíž velikost bude velká podle počtu prvků a přitom se z ní dá odebírat v konstantním čase nebo O(log N)

a nebo jinak
nějakou strukturu, u níž se dá snadno odkazovat na další prvek....

například mám řadu
1,2,3

a najednou dám rozkaz, že za 1 je 3 a ne 2 jak to předtím bylo.... tedy ztratím odkaz na tu 2ku

Offline

 

#2 22. 11. 2010 01:32 — Editoval RePRO (22. 11. 2010 01:34)

RePRO
Místo: Jihlava
Příspěvky: 363
Škola: AI VŠPJ (09-12, Bc.)
Pozice: programátor
Reputace:   11 
Web
 

Re: Odebrání prvku v konstantním čase

↑ VojtechSejkora: Ahoj, a v jakém jazyce to má být napsané?

První krok je takový, že si uděláš jednoduše strukturu. Takže v jazyce C++ by to mohlo být takto:

Code:

 struct Prvek {
  int number;
  Prvek * next;
 };

Pozor na středník! No, a potom si už uděláš potřebné tři metody:
1 - vytvoření spoj. seznamu
2 - přidání prvku do seznamu
3 - odebrání prvku ze seznamu (nejtěžší funkce/metoda)

Jinak k vytvoření toho seznamu se v jazyce C používá malloc u C++ už je šikovnější new.


Srdcem trochu-programátor, duší rádoby-matematik a povoláním analytik-vývojář.

Offline

 

#3 22. 11. 2010 07:32

pizet
Místo: Levice/Praha
Příspěvky: 459
Reputace:   11 
 

Re: Odebrání prvku v konstantním čase

↑ RePRO: A čo keď bude chcieť odobrať niečo čo nevie kde je? Síce samotné odobranie zaberie čas O(1) ale nájdenie môže zabrať až O(N).

Ak chceš dačo, čo ti zaručuje čase konštantné (alebo niekedy takmer) tak si pozri čo je to hešovanie (alebo asociatívne polia). Tu je o tom fajn kuchárka: http://ksp.mff.cuni.cz/tasks/21/cook4.html

Tej tvojej druhej požiadavke som celkom nepochopil ...


Do you follow my way? Or you just see a black stain swimming in the Milky Way ...
KSP je určený pre študentov základných a stredných škôl, ktorí majú záujem naučiť sa niečo z oblasti algoritmov, logických úloh, programovania a informatiky.

Offline

 

#4 22. 11. 2010 10:04

Oxyd
Příspěvky: 614
Škola: MFF UK, teoretická informatika
Pozice: Student
Reputace:   31 
 

Re: Odebrání prvku v konstantním čase

↑ pizet:

Odebrání prvku ze spojovýho seznamu stojí O(1) času. Odebrání z binárního stromu stojí též O(1). Odebrání z vyváženýho binárního stromu tě bude stát O(log n). Ovšem všechno tohle předpokládá, že už máš "v ruce" ten prvek, co chceš odebrat (máš na něj ukazatel nebo něco stejně dobrýho). Pokud ho předtím musíš najít, tak vyhledání ve spojáku tě bude stát O(n), v nevyváženym binárnim stromu taky O(n) a ve vyváženym binárnim stromu (vyhledávacim) O(log n).

Zkus být trošku přesnější, co s tou strukturou chceš vlastně dělat.


Mýlím se častěji, než bych chtěl. Pokud vám v mém příspěvku něco nehraje, neváhejte se zeptat.
Jsem stále mlád a je mi příjemnější tykání. :)

Offline

 

#5 22. 11. 2010 12:18 — Editoval VojtechSejkora (22. 11. 2010 12:19)

VojtechSejkora
Příspěvky: 176
Reputace:   
 

Re: Odebrání prvku v konstantním čase

v žádném jazyku to psát nechci, jde mi jen o algoritmus

↑ Oxyd:
a já vím, kde tento prvek je, znám jeho index ( to jsme zjistil O(log N) pomocí binárního vyhledávání), ale pokud to budu mít v poli, tak musím všechny co jsou vzadějc posunout dopředějc, a to v poli může zabrat až O(N) pokud to tedy porvenu N krát mám z toho O(N^2) a to si už nemůžu dovolit

↑ pizet:
víš můj problém je ten, že ty kuchařky moc nechápu, protože jsou pro mne příliš obecně psané:( , ale taktéž mě napadlo to udělat pomocí hešování, ale při čtení té kuchařky jsem jaksi tomu neporozumněl:(, ale díky za odkaz

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson