递归地将数组拆分为奇数和偶数元素的模式
pattern of recursively splitting an array to odd and even elements
我正在寻找一种模式来递归地将数组拆分为奇数和偶数元素。我将尝试用以下方式描述问题:
假设我们有一个长度为 16 的数组:
a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
第一次迭代:拆分为奇数和偶数
[0,2,4,6,8,10,12,14]
[1,3,5,7,9,11,13,15]
基本上是
a[2i] for i=0:7
a[2i+1] for i=0:7
将这些数组中的每一个再次拆分为奇数和偶数元素我们有
[0,4,8,12]
[2,6,10,14]
[1,5,9,13]
[3,7,11,15]
同样是
4i for i=0:3
4i+2
4i+1
4i+3
再次拆分数组元素将是
[0,8]
[4,12]
.
.
[1,9]
或
8i for i=0:1
8i+4
8i+2
8i+6
8+1
8i+5
8i+3
8i+1
数组需要递归拆分,直到每个数组只有两个元素。
有一件事我注意到下半部分与上半部分相似,我们只需要在索引词中添加“1”
我想知道如何找到具有“n”个元素的数组的模式?
非常感谢您的宝贵时间。
假设你的数字 n
是 2 的幂(又名 2^k
):
那么你将得到 m
= n/2
= 2^(k-1)
数组,其中 i
in {0,1}
:
0: m*i+f(0)
1: m*i+f(1)
...
j: m*i+f(j)
...
m-1: m*i+f(m-1)
其中 f(x)
是一个函数,它接受一个整数 (x
),将其转换为 k-1
位二进制数 (b
),将其取反 ( rb
) 和 returns 其十进制值 (y
).
k=4
的示例(看起来很像您的值):
x
b
rb
f(x)=y
0
000
000
0
1
001
100
4
2
010
010
2
3
011
110
6
4
100
001
1
5
101
101
5
6
110
011
3
7
111
111
7
我正在寻找一种模式来递归地将数组拆分为奇数和偶数元素。我将尝试用以下方式描述问题:
假设我们有一个长度为 16 的数组:
a=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
第一次迭代:拆分为奇数和偶数
[0,2,4,6,8,10,12,14]
[1,3,5,7,9,11,13,15]
基本上是
a[2i] for i=0:7
a[2i+1] for i=0:7
将这些数组中的每一个再次拆分为奇数和偶数元素我们有
[0,4,8,12]
[2,6,10,14]
[1,5,9,13]
[3,7,11,15]
同样是
4i for i=0:3
4i+2
4i+1
4i+3
再次拆分数组元素将是
[0,8]
[4,12]
.
.
[1,9]
或
8i for i=0:1
8i+4
8i+2
8i+6
8+1
8i+5
8i+3
8i+1
数组需要递归拆分,直到每个数组只有两个元素。
有一件事我注意到下半部分与上半部分相似,我们只需要在索引词中添加“1”
我想知道如何找到具有“n”个元素的数组的模式?
非常感谢您的宝贵时间。
假设你的数字 n
是 2 的幂(又名 2^k
):
那么你将得到 m
= n/2
= 2^(k-1)
数组,其中 i
in {0,1}
:
0: m*i+f(0)
1: m*i+f(1)
...
j: m*i+f(j)
...
m-1: m*i+f(m-1)
其中 f(x)
是一个函数,它接受一个整数 (x
),将其转换为 k-1
位二进制数 (b
),将其取反 ( rb
) 和 returns 其十进制值 (y
).
k=4
的示例(看起来很像您的值):
x | b | rb | f(x)=y |
---|---|---|---|
0 | 000 | 000 | 0 |
1 | 001 | 100 | 4 |
2 | 010 | 010 | 2 |
3 | 011 | 110 | 6 |
4 | 100 | 001 | 1 |
5 | 101 | 101 | 5 |
6 | 110 | 011 | 3 |
7 | 111 | 111 | 7 |