NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
Petr Šťastný
Tvůrce
Avatar
Petr Šťastný:14.6.2017 17:57

Zdravím, pracuji na jednom algoritmu a potřebuji si vybrat kolekci, se kterou budu pracovat.

Budu zpracovávat N prvků, přičemž N-1 prvků budu potřebovat vložit na různá místa do kolekce. Zkoušel jsem LinkedList, ale potřebuji prvky vkládat na určité pozice dle indexu. List je podle všeho na tohle opravdu pomalý, nevím, jestli ho chci použít. A samozřejmě jsem ještě zkoušel pole, ale abych obsáhl všechny možné situace, musel bych vytvořit opravdu obrovské pole. I do pole s velikostí ulong.MaxValue by se vešlo jenom 20 předmětů (v nejhorším případě).

Proto jsem se chtěl zeptat, jakou kolekci mám použít? Existuje nějaká speciální přizpůsobená? Dá se nějakým způsobem vkládat do LinkedListu na určitý index? Nebo mám použít ten List?

Děkuji

 
Odpovědět
14.6.2017 17:57
Avatar
Neaktivní uživatel:14.6.2017 18:40

I do pole s velikostí ulong.MaxValue by se vešlo jenom 20 předmětů (v nejhorším případě).

No to by mě teda zajímalo, co je to za předměty a jak je ukládáš.

Nahoru Odpovědět
14.6.2017 18:40
Neaktivní uživatelský účet
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Šťastný:14.6.2017 18:53

Ukladam normalne treba cisla.

Delka pole by mela byt predbezne N! (mozna bych to mohl srazit, ale i tak se mi to nezda jako spravny typ kolekce)

http://m.wolframalpha.com/input/?…

(je to videt v grafu)

 
Nahoru Odpovědět
14.6.2017 18:53
Avatar
Odpovídá na Petr Šťastný
Neaktivní uživatel:14.6.2017 19:03

To se mi zdá jako silně neoptimalizovaná věc, která se skutečně nedá řešit takto. Co je to ten "předmět" proč potřebuješ na N předmětů pole o velikosti N! ?

Nahoru Odpovědět
14.6.2017 19:03
Neaktivní uživatelský účet
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Šťastný:14.6.2017 19:36

Vím že je to neoptimalizované, proto nechci používat pole. Například List s Insert by měl velikost pouze N, ale abych to mohl udělat bez insertu (tedy pole), potřebuji N!. Proto hledám kolekci, která mi umožní rychle (což list rychle nedokáže, pokud se nepletu) insertovat prvky na index.

 
Nahoru Odpovědět
14.6.2017 19:36
Avatar
Odpovídá na Petr Šťastný
Neaktivní uživatel:14.6.2017 20:00

Nechceš zkusit Hashtable/Dic­tionary?

Nahoru Odpovědět
14.6.2017 20:00
Neaktivní uživatelský účet
Avatar
Petr Šťastný
Tvůrce
Avatar
Odpovídá na Neaktivní uživatel
Petr Šťastný:14.6.2017 21:49

Nejsem si jistý, jak bych to použil.

Mám několik čísel. Mám kolekci (třeba Dictionary), ve které mám 1 číslo ("základní číslo").

  1. číslo insertnu před nebo za to základní číslo
  2. číslo insertnu před nebo za jedno z čísel v kolekci

Atd...

Nevím, jak to v Dictionary udělat. Takhle potřebuji rozřadit čísla, aby přesně držely pozici.

 
Nahoru Odpovědět
14.6.2017 21:49
Avatar
Odpovídá na Petr Šťastný
Neaktivní uživatel:14.6.2017 22:10

Tak to ne no. Tak LinkedList. Pokud chceš tahle vkládat libovolně před nebo za prvky, a přitom udržet jejich pozici, tak neznám nic jiného než spojový seznam.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
14.6.2017 22:10
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Petr Štechmüller:15.6.2017 10:05

Pokud budeš mít hodně prvků, tak vkládání do LinkedListu může být pomalé O(n). Lze to urychlit tak, že by jsi použil datovou strukturu Skiplist. Tím snížíš složitost vkládání na O(log n) a v nejhorším případě O(n).

Nahoru Odpovědět
15.6.2017 10:05
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.