我有一个如下文件,
150 event4
160 event4
160 event0
170 event4
175 event4
180 event4
190 event4
192 event3
195 event4
----------
----------
第一列是实际发生相应事件的毫秒时间。所以event4发生在150毫秒。
我有以下任务要做,
逐个迭代。
如果连续事件之间的差距小于80 毫秒,它们是一个单一活动的序列。
例如
100 event4
120 event5
140 event6
200 event4
所有这些都有不超过80毫秒的连续差异。 如果存在超过80毫秒的差异,则意味着当前序列结束并且新序列开始。 我的目标是聚类序列。并且在不同的群集中报告特定事件的数量。因此,在以下示例中,在集群1中,事件4发生了4次,事件5发生了1次,事件6发生了1次。在第二次集群事件中4次,事件5次1次。
100 event4
120 event5
140 event6
200 event4
300 event4
320 event4
340 event4
400 event5
我现在正在做的是,
我不知道这是一种有效的方法。我有一些问题。
那么,你们有没有更好的想法?
答案 0 :(得分:1)
这不是科学中所谓的“聚类”,而只是分组或聚合。您聚合事件除非它们被太多时间分开。
至于方法,你正在追求规范的方法。除非您的数据已经存在于复杂的数据库索引中,否则您无法做到比线性更好。只要它是一个文本文件,除了线性读取之外别无他法。
对于数据结构,将其组织为ArrayList<ArrayList<String>>
或ArrayList<HashMap<String, Integer>>
没有任何问题,因为事件ID是字符串。内存要求应该适中,并且可以扩展到千兆字节。如果遇到内存问题,请尝试维护HashSet<String>
以仅保留每个事件字符串的一个副本,并将时间转换为数字数据类型。然后,当您没有足够的事件时,您应该能够加载几GB。
实际上我在这里看不到任何重大挑战。