Ik probeer het volgende te doen:
Ik schrijf de elementen van een array van lengte 2^n=N volgens hun binaire representatie. Neem twee getallen j en k met j>=k die de posities voorstellen in de binaire representatie waarbij ik tel vanaf 0 vanaf de least significant bit (rechts dus). Nu wil ik de elementen eruitpikken die op posities k,...,j van 0 tot 2^(j-k+1) tellen in binair.
Dit wil ik allemaal mbv for-loopjes doen.
Een voorbeeld: stel n=4 bits en N=16. Dit zijn de indices:
Stel j=2 en k=1. Dan wil ik loopen over de volgende elementen:
en
en dan over
en
Een ander voorbeeld: als j=3 en k=1 wil ik de elementen hebben:
en vervolgens
Laatste voorbeeld: als j=k=3 dan wil ik loopen over
Dit is wat ik nu heb (werkt niet goed)
Ieder hulp zou ik zeer op prijs stellen!
Ik schrijf de elementen van een array van lengte 2^n=N volgens hun binaire representatie. Neem twee getallen j en k met j>=k die de posities voorstellen in de binaire representatie waarbij ik tel vanaf 0 vanaf de least significant bit (rechts dus). Nu wil ik de elementen eruitpikken die op posities k,...,j van 0 tot 2^(j-k+1) tellen in binair.
Dit wil ik allemaal mbv for-loopjes doen.
Een voorbeeld: stel n=4 bits en N=16. Dit zijn de indices:
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| j k 3210 ==== 0 0000 1 0001 2 0010 3 0011 4 0100 5 0101 6 0110 7 0111 8 1000 9 1001 10 1010 11 1011 12 1100 13 1101 14 1110 15 1111 |
Stel j=2 en k=1. Dan wil ik loopen over de volgende elementen:
C++:
1
2
3
4
| 0 0000 2 0010 4 0100 6 0110 |
en
C++:
1
2
3
4
| 1 0001 3 0011 5 0101 7 0111 |
en dan over
C++:
1
2
3
4
| 8 1000 10 1010 12 1100 14 1110 |
en
C++:
1
2
3
4
| 9 1001 11 1011 13 1101 15 1111 |
Een ander voorbeeld: als j=3 en k=1 wil ik de elementen hebben:
C++:
1
2
3
4
5
6
7
8
| 0 0000 2 0010 4 0100 6 0110 8 1000 10 1010 12 1100 14 1110 |
en vervolgens
C++:
1
2
3
4
5
6
7
8
| 1 0001 3 0011 5 0101 7 0111 9 1001 11 1011 13 1101 15 1111 |
Laatste voorbeeld: als j=k=3 dan wil ik loopen over
C++:
1
2
3
4
5
6
7
8
| 0 0000, 8 1000 en 1 0001, 9 1001 en 2 0010, 10 1010 en 3 0011, 11 1011 en 4 0100, 12 1100 en 5 0101, 13 1101 en 6 0110, 14 1110 en 7 0111, 15 1111 |
Dit is wat ik nu heb (werkt niet goed)
C++:
1
2
3
4
5
6
7
8
9
| t = j-k+1; for (p=0; p<N; p += 2^(j+1) ) { for (q=p; q<p+2^t; q += 2^(k+1) { // fout for (r=q; r<q+2^t; r += 2^k) { print r; } } } |
Ieder hulp zou ik zeer op prijs stellen!
[ Voor 4% gewijzigd door Verwijderd op 10-07-2006 13:54 ]