Portál AbcLinuxu, 3. května 2025 17:22
bool Mnozina::find(int x, size_t& result) const { const int *p = _data; size_t size = _size; size_t index; while (size > 0) { index = size >> 1; if (p[index] == x) { result = (size_t)(p - _data) + index; return true; } else if (p[index] > x) { size = index; } else // p[index] < num { p += index + 1; size -= index + 1; } } result = (size_t)(p - _data); return false; }Ano !!! Progtest to sežral. Děkuji všem za rady, nakonec jsem to teda našel sám
bsearch
ze stdlib
.
binarni vyhledavani je ukazkovym prikladem algoritmu typu divide et impera, takze pouziti rekurze je vic nez nasnade. z vyse uvedeneho kodu je opravdu radost lustit, co vlastne dela.
mimochodem, tvuj priserny zlozvyk zamenovat operace nasobeni a deleni s operacemi bitovych posunu byl povazovan za znamku spatneho programatora uz v sedesatych letech minuleho stoleti... a to tehdy byly jine pocitace...
ale rekurzivně ho nepíše snad nikdoto je hodne silne tvrzeni. ja treba jo a nejsem sam. imho je tak ten algoritmus citelnejsi a jednotliva volani jsou v tail-pozici, takze rychlost je plne srovnatelna s iterativni verzi. a hlavne.
Bitový posun je mnohem rychlejší a nepracuji se znaménkovým typem, takže ...a muzes mi to tvrzeni nejak dolozit... a demonstrovat o kolik je to mnohem rychlejsi?
# vstup rax, výstup rax 48 d1 e8 shr rax #bitový posun vpravo o 1b vs 48 c7 c3 02 00 00 00 mov rbx, 0x2 48 f7 f3 div rbx
Rikejte mi "Mistr Svinak"
No, hele, co takhle v zadání "Odevzdávaný soubor nesmí kromě implementace třídy Mnozina obsahovat nic jinéh, zejména ne funkci main" ... ?
Další úkol z C++ a další problémy.Já nevím, co na tom jazyku lidi vidí…
...dneska bez školy nemůžeš prodávat ani ty pračky, ale nezoufej, možná to vyjde s lopatou.Aj na to sú už dneska školy
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.