Ik ben al een tijdje aan het stoeien met het volgende probleem. Zoals jullie misschien wel weten wordt in het FFT algoritme gebruik gemaakt van 'bit reverse order'. Dit houdt in dat de elementen van een array herschikt worden volgens de bit-reversal methode.
Bijvoorbeeld.
We hebben een array van lengte 24=16. Het element op index 3 (=0011) komt op index 12 (=1100), het element op index 7 (=0111) komt op index 14 (=1110), het element op index 1 (=0001) komt op index 8 (=1000) enzovoort..
Nu wil ik graag een loopje hebben die dit voor mij doet maar met een kleine variatie. In plaats van dat we kijken naar *alle* bits in de indexen wil ik alleen de bits omdraaien die op plek p t/m q staan.
Bijvoorbeeld voor p=1 en q=2 worden de volgende indexen verwisselt.
(we tellen de bits van rechts naar links, beginnende by nul)
De rest van de indexen blijven ongemoeid.
Of voor p=0 en q=2:
Bij voorbaat hartelijk dank!
Bijvoorbeeld.
We hebben een array van lengte 24=16. Het element op index 3 (=0011) komt op index 12 (=1100), het element op index 7 (=0111) komt op index 14 (=1110), het element op index 1 (=0001) komt op index 8 (=1000) enzovoort..
Nu wil ik graag een loopje hebben die dit voor mij doet maar met een kleine variatie. In plaats van dat we kijken naar *alle* bits in de indexen wil ik alleen de bits omdraaien die op plek p t/m q staan.
Bijvoorbeeld voor p=1 en q=2 worden de volgende indexen verwisselt.
(we tellen de bits van rechts naar links, beginnende by nul)
C++:
1
2
3
4
5
6
| 3210 3210 ============ 0000 -> 0000 (hier gebeurt dus niks, maar staat hier voor de volledigheid) 0010 -> 0100 0100 -> 0010 0110 -> 0110 (gebeurt ook niks) |
De rest van de indexen blijven ongemoeid.
Of voor p=0 en q=2:
C++:
1
2
3
4
5
6
7
8
9
10
| 3210 3210 ============ 0000 -> 0000 (hier gebeurt dus niks, maar staat hier voor de volledigheid) 0001 -> 0100 0010 -> 0010 (gebeurt niks) 0011 -> 0110 0100 -> 0001 0101 -> 0101 (gebeurt niks) 0110 -> 0011 0111 -> 0111 (gebeurt niks) |
Bij voorbaat hartelijk dank!
[ Voor 4% gewijzigd door Verwijderd op 15-06-2006 23:04 ]