在数组中查找模式

时间:2013-04-03 10:25:43

标签: arrays algorithm design-patterns loops

我在Flash中制作一些模拟轮盘赌中X个旋转的东西,取每个值,确定其颜色,然后每次颜色变化时将颜色的“字符串”推入数组(例如,如果它变为R ,R,R,B当它击中黑色时,它将'3'推入一个数组并再次开始计数)。我想要确定的是超过一定数量的旋转(例如,9个旋转),如果它可以在整个阵列中找到任何特定的模式。

我这样做是因为当我在两种不同的情况下进行测试时发生了一件奇怪的事情。 一个案例是if(arr[i] > 2 && arr[i+1] < 7),如果一个持续时间超过2个旋转的颜色序列被一个小于7的序列所取代,则非常相似: (~RRRB,~RRRBB,~RRRBBB,~RRRBBBB,~RRRBBBBB~,RRRBBBBBB)

另一种情况是交替颜色的任何序列在达到8条纹之前被打破: (RBRR, RBRBB,RBRBRR,RBRBRBB,RBRBRBRR,RBRBRBRBB)

平均而言,第二种情况比第一种情况发生的频率高20%......由于两种情况具有相同数量的情况,每种情况下具有相同数量的旋转,因此不应该在统计上发生,甚至帐户为0,20%是巨大的...我会将代码发布到下面两个以确保它是正确的,但它只是让我对这种差异感到困惑......无论如何我离题了。

基本上我只想弄清楚9个连续数字的任何其他特定模式(基于它们的颜色,而不是价值)是否倾向于更频繁地出现。我真的不知道如何采取其他方式,而不是将其置于一个巨大的嵌套for循环9深,然后检查一个开关中的每个结果(这绝对是巨大的,2 ^ 9巨大...)。 / p>

for(
    for(
        for(
            for(
                for(
                    for(
                        for(
                            for(
                                for(
                                    switch(){ //512 cases

现在我知道它是flash,而actionscript可能是最糟糕的做法之一,但是我正在创建一个小应用程序而且我还没有很好地学习C或其变体来完成其他任何事情。我真正需要的是指向我可以使用的任何特定有效快捷方式的指针。任何提示将不胜感激。

方案代码:

function findSequence():void
{
    for (var i = 0; i< avgNumCl.length; i++)
    {
        if (avgNumCl[i] > 2 && avgNumCl[i + 1] < 7)
        {
            sequenceArr[0]++;
        }
        if (avgNumCl[i] == 1 && avgNumCl[i+1] == 1 &&
           avgNumCl[i+2] == 1 && avgNumCl[i+3] == 1 &&
           avgNumCl[i+4] == 1 && avgNumCl[i+5] == 1 &&
           avgNumCl[i+6] == 1 && avgNumCl[i+7]>1)
        {
            sequenceArr[1]++;
        }
        else if (avgNumCl[i] == 1 && avgNumCl[i+1] == 1 &&
           avgNumCl[i+2] == 1 && avgNumCl[i+3] == 1 &&
           avgNumCl[i+4] == 1 && avgNumCl[i+5] == 1 &&
           avgNumCl[i+6]>1)
        {
            sequenceArr[1]++;
        }
        else if (avgNumCl[i] == 1 && avgNumCl[i+1] == 1 &&
           avgNumCl[i+2] == 1 && avgNumCl[i+3] == 1 &&
           avgNumCl[i+4] == 1 && avgNumCl[i+5]>1)
        {
            sequenceArr[1]++;
        }
        else if (avgNumCl[i] == 1 && avgNumCl[i+1] == 1 &&
           avgNumCl[i+2] == 1 && avgNumCl[i+3] == 1 &&
           avgNumCl[i+4]>1)
        {
            sequenceArr[1]++;
        }
        else if (avgNumCl[i] == 1 && avgNumCl[i+1] == 1 &&
           avgNumCl[i+2] == 1 && avgNumCl[i+3]>1)
        {
            sequenceArr[1]++;
        }
        else if (avgNumCl[i] == 1 && avgNumCl[i+1] == 1 &&
           avgNumCl[i+2]>1)
        {
            sequenceArr[1]++;
        }
    }
}

0 个答案:

没有答案
相关问题