【发布时间】:2011-05-16 20:08:37
【问题描述】:
我正在寻找任何语言或其伪代码的聚类排序实现。原始研究论文不包含任何内容。由于我找不到任何现有的解决方案(主要是因为这种技术很新),我决定自己实现它。因此,作为第一步,我需要识别数字输入中的数据块。我知道这可能会走向人工智能,但我已经做好了准备,因为我知道基础知识。
那么关于如何识别数据人中的团块有什么想法吗?现在我想专注于升序或降序的数字块。
例如:3, 7, 10, 56, 4, 1, 3, 34
按升序排列有 3 个簇:3, 7, 10, 56,4,1, 3, 34
我的问题是如何以编程方式执行此操作?
(聚类排序: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;
}
}
}
【问题讨论】:
-
我刚刚写信给论文的作者。会让你知道我发现了什么。
-
首先,检测递增序列有什么不重要的?只需将每个值与前一个值进行比较,看看它是更高还是更低。存储边界是另一回事。其次,我注意到论文摘要无法与 Timsort 进行比较,我建议将其作为要击败的目标比 Heapsort 更好的选择。
-
生活中有很多事情是显而易见的,也是微不足道的。例如冒泡排序。但是你敢在你的代码中使用它吗?这里也是一样。该解决方案具有很大的复杂性。请参阅我的问题中的更新。这也是一个大学演讲,所以我在这里别无选择。 (感谢您的建议)
-
复杂度为 O(n)。当然,不存在找到所有复杂度小于 O(n) 的块的算法,因为您必须查看所有数据。我还没有读过这篇论文,所以集群排序可能会与集群的近似划分一起工作。
-
我明白了...所以我担心一个不存在的问题。根据论文没有大致的划分。所以它必须只有 O(n)。先生,感谢您的宝贵时间。
标签: algorithm language-agnostic sorting pseudocode