识别Clump排序实现的数据块(段)

时间:2010-11-28 11:22:10

标签: algorithm language-agnostic sorting pseudocode

我正在寻找任何语言或其伪代码的Clump Sort实现。原始研究论文不包含任何内容。由于我无法找到任何现有的解决方案(主要是因为这种技术很新),我决定自己实现它。因此,作为第一步,我需要在数字输入中识别数据块。我知道这可能会用于人工智能,但我已经准备好了,因为我知道基础知识。

那么关于如何识别数据团队中的团块的任何想法?现在我想集中讨论上升或下降的数字。

例如:
3, 7, 10, 56, 4, 1, 3, 34
按顺序有3个团块:
3, 7, 10, 56
4
1, 3, 34

我的问题是如何以编程方式执行此操作?

(Clump Sort:http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=5489222

谢谢!


更新

好吧,花了一些时间我找到了一个解决方案,但我不知道纸张作者的想法是否也是如此。如果是那时我们可能会增加堆排序的复杂性而不是最小化它。

int[] input = { 30, 7, 10, 56, 4, 1, 3, 34 };
List<ClumpStartEnd> clumps = new List<ClumpStartEnd>();
public void ClumpIdentifier(int start)
{
    for (int i = start + 1; i < input.Length + 1; i++)
    {
        if (i == input.Length || input[i] < input[i - 1])
        {
            clumps.Add(new ClumpStartEnd(start, i - 1));
            ClumpIdentifier(i);
            break;
        }
    }
}

1 个答案:

答案 0 :(得分:0)

我同意Timsort可以胜过,但我在提交论文后不久就发现了它;抱歉。

OP对该算法的评估是一次脱发。每次Clump遇到反转时,它都会在预期的升序和降序之间交替。因此,3,7,10,56,4,1,3,34是3,7,10,56的上升运行,然后反转开始下降运行4,1,然后该顺序的反转开始上升运行3,34。