【问题标题】:pattern of recursively splitting an array to odd and even elements递归地将数组拆分为奇数和偶数元素的模式
【发布时间】:2020-12-31 01:02:31
【问题描述】:

我正在寻找一种模式来递归地将数组拆分为奇数和偶数元素。我将尝试在以下内容中描述问题:

假设我们有一个长度为 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”个元素的数组的模式?

非常感谢您的宝贵时间。

【问题讨论】:

    标签: fft recurrence ntt


    【解决方案1】:

    假设您的号码 n 是 2 的幂(又名 2^k):

    那么您将拥有m = n/2 = 2^(k-1) 数组,其中i{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) 并返回其十进制值 ( 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

    【讨论】:

    • 非常感谢。这几天我一直在思考这个问题。我实际上打算用它来设计一个数字硬件,我可以轻松地翻转阵列。
    • @elec_hi ^^我希望你有一个固定的k,这会让一切变得更容易^^
    • 是的,K 是固定的,如果它不是 2 的幂,我可以用零填充数组。我实际上将使用它来实现从下到上数论变换计算器的数字实现。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 2017-01-26
    • 2013-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多