我正在寻找任何语言或其伪代码的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;
}
}
}
答案 0 :(得分:0)
我同意Timsort可以胜过,但我在提交论文后不久就发现了它;抱歉。
OP对该算法的评估是一次脱发。每次Clump遇到反转时,它都会在预期的升序和降序之间交替。因此,3,7,10,56,4,1,3,34是3,7,10,56的上升运行,然后反转开始下降运行4,1,然后该顺序的反转开始上升运行3,34。