在两个序列之间映射的公式

时间:2016-06-07 20:20:09

标签: math sequences

鉴于下面的3个序列,我希望能够将seqN映射到seq0。 seq1通过以下方式映射到seq0,seq2映射到seq1:

<a href="applied_jobs.php?delete_id=<?php echo $row['job_id']; ?>" onclick="return confirm('Delete this record?');" data-placement="top" data-toggle="tooltip" title="Delete Record" class="btn-danger btn-md pull-right"> <span class="glyphicon glyphicon-trash"></span></a>

例如,

seqN(i) = (seqN-1(i)*7)%27

现在,一种方法是递归地应用该函数。但这不是我的选择(这需要在硬件中实现)。我也不能保存最后一个序列的值来计算当前序列的值 - 我没有空间。

有没有办法使用数学方程式(不是递归函数)将seqN映射到seq0?

2 个答案:

答案 0 :(得分:0)

除了@Nitpick所指出的(27%27 = 0,所以你要么停在26或使用28代替),你应该只使用一个力量:

seq N (i)=(seq 0 (i)* 7 N )%27

或者:

seq N (i)=(seq N-1 (i)* 7)%27 =(seq N-2 ( i)* 7 2 )%27 = ...... =(seq NN (i)* 7 N )%27

答案 1 :(得分:0)

不确定这是否有帮助,但某些seq_N(i) -> seq_/{N+/-1}(i)的转换完全取决于以下一组周期:

List(0)
List(1, 7, 22, 19, 25, 13, 10, 16, 4)
List(2, 14, 17, 11, 23, 26, 20, 5, 8)
List(3, 21, 12)
List(6, 15, 24)
List(9)
List(18)

这样0 -> 01 -> 7 -> 22 -> 19 -> 25 -> ...

根据这些周期,您可以采取数字位置并将其翻译为N % length_of_cycle(仅处理循环包装)并获取原始数字。

我使用以下代码(用Scala编写)找到了这些循环:

val m = (0 to 26).map(x => (x, x * 7 % 27)).toMap

var cycles = (0 to 26).map(x => {
    var x_i = x
    val oot = scala.collection.mutable.ArrayBuffer(x)
    while (m(x_i) != x)
    {
        x_i = m(x_i)
        oot.append(x_i)
    }
    oot.toList
})

var filteredCycles = cycles.toArray

for (i <- (1 to 26))
{
    val cycle = filteredCycles(i)
    for (j <- (1 until cycle.size))
    {
        filteredCycles(cycle(j)) = List[Int]()
    }
}

val uniqueCycles = filteredCycles.filter(_.size != 0)