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
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
↑ 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:
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.
Offline
↑ 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 ...
Offline
↑ 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.
Offline
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