Porovnanie dvoch tabuliek

Jenda

Re:Porovnanie dvoch tabuliek
« Odpověď #15 kdy: 05. 09. 2014, 03:12:33 »
Nevím, jestli se mi to zdá kvůli pokročilé noční hodině, nebo se tady fakt lidi radí, jak vyřešit nejasně formulovaný problém.

Milan:
  - Původní dotaz bych vyřešil setříděním obou tabulek podle ID a následným sekvenčním projitím. Setřídit 50k čísel je hračka.

Bla:
  - Zjišťování, zda byl token použit, si vysloveně říká o hashtable.
  - Tu deltu jsem asi nepochopil. Pokud jsou ta čísla dvojciferná, můžeš mít nejvíc 99 delt a je to triviální. Tobě ale přichází i pozice, proti které musíš porovnávat? Ve třiceti dvou číslech je jenom comb(32; 2) = 496 párů, ne? Takže si můžeš udělat tabulku 496*99 = 50 kb (resp. 200 kB, pokud potřebuješ držet ještě nějaký index) a pak se podíváš na vybraná políčka.

gamer:
  - Chápu správně, že indexuješ pole přímo tou hodnotou? Tazatel vůbec neuvedl, jak může být hodnota velká, klidně to můžou být 32b, nebo dokonce 64b čísla (sám používáš typ int); v prvním případě ti to sežere 4 Gb, ale spíš 4 GB (protože to ten bool vektor asi bude zarovnávat na bajty, ale C++ neznám) paměti, v druhém případě se ti to do paměti nevejde v žádném případě.


Jenda

Re:Porovnanie dvoch tabuliek
« Odpověď #16 kdy: 05. 09. 2014, 03:16:13 »
Bla: to jste vyřešili tak, že na GPU projdete úplně všechny tokeny? Neznám ta vstupní data, ale fakt by je nešlo třídit třeba podle rotace (seřazením prvků, sečtením prvků…) a podle těch delt, a pak už porovnat jenom kandidáty, co prošli?

milan

Re:Porovnanie dvoch tabuliek
« Odpověď #17 kdy: 05. 09. 2014, 08:24:24 »
Dakujem za odpovede.
Stlpec ID1 a ID2 obsahuje sestciferne cislo.
Stlpce HODNOTA1 a HODNOTA2 obsahuju MD5 hashe.
Udaje su zatial v dvoch CSV suboroch, neskor ich budem importovat do SQLitu.

mxm

Re:Porovnanie dvoch tabuliek
« Odpověď #18 kdy: 05. 09. 2014, 22:18:42 »
Zdarec,
zda se mi idealni to resit pomoci algoritmu abecedniho porovnani, ale musis mit obe tabulky setridene podle ID.

Mas dve mnoziny ID - A a B, u kazde v cyklu drzis odkaz na klic mnoziny A a klic mnoziny B, a zacinas cyklus:
<zacatek cyklu>
Pokud je klic A mensi nez klic B -> pak zaznam z A podle klice A neni v mnozine B -> posun ukazatel klic A o jedno dal, KONEC 
Pokud je klic A vetsi nez klic B -> pak zaznam z B podle klice B neni v mnozine A -> posun ukazatel klic B o jedno dal, KONEC
Pokud jsou oba klice shodne -> pak zaznamy podle klice A i B existuji v A i B -> porovnej hodnoty a mas rozdil -> posun oba klice A i B o jedno dal, KONEC

<KONEC>
jakmile dorazis na konec s jednim z ukazatelu na klic A nebo B pak ostatni zaznamy v opacne mnozine nejsou
jinak jdi na <zacatek cyklu>



   


v.sp

Re:Porovnanie dvoch tabuliek
« Odpověď #19 kdy: 06. 09. 2014, 16:56:58 »
Potrebujem vypisat
1. vsetky ID1 z Tabulka1, kde ID1 = ID2 a HODNOTA1 <> HODNOTA2
2. vsetky ID1 z Tabulka1, ktore chybaju v Tabulke2
3. vsetky ID2 z Tabulka1, ktore chybaju v Tabulke1
Pokud to jsou jen tisíce záznamů a cílem je (jednou, ne stokrát za sekundu) dostat výsledek, tak bych sáhl po pro člověka nejjednodušším řešení:

2. select id1 from tabulka1 minus select id2 from tabulka2
3. select id2 from tabulka2 minus select id1 from tabulka1
1. select id1 from tabulka1 join tabulka2 on (id1=id2) where hodnota1<>hodnota2

(a nebo s full outer joinem to přepsat jako jeden dotaz, ale to je už o trošku složitější na pochopení a odladění).