-
Data: 2015-08-31 23:40:58
Temat: Re: Szybkie szukanie ustawionego bitu
Od: bartekltg <b...@g...com> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu poniedziałek, 31 sierpnia 2015 22:49:24 UTC+2 użytkownik szemrany napisał:
> On Mon, 31 Aug 2015 20:39:28 +0000 (UTC), Tomek Kańka wrote:
>
> >> Mam liczbę 64 bit, traktuję ją jako tablicę bitów, zazwyczaj są w niej
> >> ustawione jakieś bity, ale czasem nie.
> >> Jak najszybciej znaleźć indeks ustawionego bitu?
> >> Wiem jak szybko sprawdzić czy zapalone są wszystkie lub żaden, ale jak
> >> odkryć, że "pali" się np. czterdziesty ósmy?
> >> Najprostsza jest pętla z przesuwaniem bitowym i testem skrajnego bitu, ale
> >> w najgorszym razie trzeba przeiterować 63 razy.
> >> Może da się szybciej?
> >
> > A to nie jest "premature optymzation":)?
>
> Raczej nie, to część struktury używanej wielowątkowo i często.
>
> >> Może jakieś operacje arytmetyczne?
> >
> > Jeśłi to tylko jeden bit, to szukaj binarnie.
>
> Algorytm wyszukiwania binarnego wymaga chyba większego zróżnicowania
> elementów w tablicy niż tylko 0 i 1.
A to czemu?
Wyszukiwani binarne oznacza tu tyle, że sprawdzasz
na raz połowę bitów.
Tu masz przykład takiego wyszukiwania
https://graphics.stanford.edu/~seander/bithacks.html
#IntegerLog
wyszukuje pierwszy zapalony bit. Obok jest parę innych.
Masz też wbudowaną funckję __builtin_clz
(w innym kompilatorze będzie się nazywałą inaczej).
Jeśli zapalony jest tylko jeden bit, możesz odjać
jedynkę i policzyć bity, lub...
wziąć modulo 37 (tylko dla 32 bitowych) lub 67.
<matma> grupa multiplikatywna liczb modulo 37 i 67 jest
generowana przez 2<matma>
wiąc 2^n % 67 będą różnymi małymi liczbami.
Teraz potrzebna tylko mała tablica odszyfrowująca;-)
pzdr
bartekltg
Następne wpisy z tego wątku
- 01.09.15 08:03 voy
- 01.09.15 10:31 szemrany
- 01.09.15 10:45 g...@g...com
- 01.09.15 11:57 M.M.
- 01.09.15 12:23 szemrany
- 01.09.15 12:30 Radoslaw Szwed
- 01.09.15 13:01 AK
- 01.09.15 13:04 szemrany
- 01.09.15 13:37 bartekltg
- 01.09.15 14:29 szemrany
- 01.09.15 14:40 szemrany
- 01.09.15 16:10 bartekltg
- 01.09.15 17:28 szemrany
- 01.09.15 22:20 szemrany
- 04.09.15 09:14 Wojciech Muła
Najnowsze wątki z tej grupy
- "Wuj dobra rada" z KDAB rozważa: Choosing the Right Programming Language for Your Embedded Linux Device
- Nowa ustawa o ochronie praw autorskich - opis problemu i szkic ustawy
- Alg. kompresji LZW
- Popr. 14. Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- Arch. Prog. Nieuprzywilejowanych w pełnej wer. na nowej s. WWW energokod.pl
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
Najnowsze wątki
- 2025-03-22 OT Silnik sie przegrzewa
- 2025-03-22 Przenoszenie przez wifi na nowego Androida
- 2025-03-22 Warszawa => Senior Account Manager <=
- 2025-03-22 Wrocław => Konsultant wdrożeniowy Comarch XL (Logistyka, WMS, Produk
- 2025-03-22 Warszawa => Spedytor Międzynarodowy <=
- 2025-03-22 Warszawa => NMS System Administrator <=
- 2025-03-22 Warszawa => Analityk IT (projekty z obszaru telco) <=
- 2025-03-22 Orzeczenie TSUE
- 2025-03-22 Warszawa => Operations Support Systems (OSS) Team Leader <=
- 2025-03-22 Warszawa => Scrum Master <=
- 2025-03-22 Warszawa => Senior Account Manager <=
- 2025-03-22 Warszawa => BI Developer / Analityk BI <=
- 2025-03-22 Warszawa => IT Recruiter <=
- 2025-03-21 Zakaz wjazdu
- 2025-03-21 Nie zawsze wchodzi jedynka