Diskuze: Algoritmus pro výpočet efektivních rozsahů
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 3 zpráv z 3.
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Tak, prvne si musis ujasnit, co mas za data v db. To mi neni z toho zadani uplne jasne.
Pokud tam jsou i rozsahy, tak je to slozitejsi, protoze budes hledat jeste
propojeni na uz hotovy rozsah.
Pokud tam jsou cisla duplicitni, co se s nimi ma stat? Maji se odmazat nebo
vytvorit novy rozsah?
Pokud mas jenom cisla, tak je staci seradit. A pak projit pole po dvou po sobe jdoucich a zda je rozdil 1. Pokud je, a prvni cislo uz je soucasti nejakeho rosahu, tak zvysis jeho max, rozsah = (min, max). Pokud neni, tak rozsah vytvoris a ulozis si jeho pozici, protoze s nim budes prave pracovat s dalsim cislem.
group = []; gi = 0; sgi = -1; // gi = group_index, sgi = selected_gi
cisla = [1, 2, 3, 4]; ci = 0;
cisla = cisla.sort();
for (ci=1; ci<cisla.length; ci++)
{
if (cisla[ci-1]+1 == cisla[ci]) // pokud jsou 2 po sobe jdouci
{
if (sgi>0) group[sgi].max = cisla[ci]; // pokud mam skupinu vybranou
else {gi++; sgi = gi; group[sgi] = [min:cisla[ci-1], max:cisla[ci]]} // pokud nemam, zalozim novou
}
else sgi = -1; // rozdil mezi cisly je vetsi nez 1, zrusit vyber skupiny
}
S hotovymi skupinami bys musel pri novem vyberu zkusit najit, skupinu, do
ktere cislo zapadne min-1<=cislo<max+1 a jeste zjistit, jestli budes
prepisovat jeji min nebo max hodnotu. A v pripade duplicit treba bude cislo meni
min, max a nebudes prepisovat nic.
Tam mozna klicova je ta prvotni myslenka, cisla si seradit. Vetsina prog. jazyku
ma funkci, ktera seradi cisla.
A samozrejme, cele to tez muzes resit pomoci sql prikazu, pokud to potrebujes
nejak zazracne rychleji nez do 1-2s.
Ano, jsou to jen unikátní čísla. Už je mi to jasné, díky moc za
nasměrování. Jdu to vyzkoušet.
Zobrazeno 3 zpráv z 3.