我对组合流的Misra-Gries算法的准确性做了作业。证明合并流的准确性至少与混合流的准确性一样好。因此,我试图提出一些实例来更好地理解问题。我发现的一个是以下内容:
假设流X =(a,a,b,b,c)和Y =(c,c,d,d,a)且k = 3
将Misra-Gries应用于X:
| x_i || a | a | b | b | c |
|-----||--------|--------|--------|--------|--------|
| d || d[a]:1 | d[a]:2 | d[a]:2 | d[a]:2 | d[a]:1 |
| || | | d[b]:1 | d[b]:2 | d[b]:1 |
和Y:
| x_i || c | c | d | d | a |
|-----||--------|--------|--------|--------|--------|
| d || d[c]:1 | d[c]:2 | d[c]:2 | d[c]:2 | d[c]:1 |
| || | | d[d]:1 | d[d]:2 | d[d]:1 |
然后根据Wikipedia,我对结果求和并递减计数器,直到仅剩k个计数器为止。 或者,根据我的讲师说:
这将导致略有不同的摘要,但是此时并不重要。让我们采用维基百科的方法:
d [a]:1,d [b]:1,d [c]:1,d [d]:1
每个计数器都减一,所以一无所有。
因此准确度为
准确度= 10/3
现在让我们检查合并流中的Misra-Gries:
| x_i | a | a | b | b | c | c | c | d | d | a |
|-----|--------|--------|--------|--------|--------|---|--------|--------|--------|--------|
| d | d[a]:1 | d[a]:2 | d[a]:2 | d[a]:2 | d[a]:1 | | d[c]:1 | d[c]:1 | d[c]:1 | d[d]:1 |
| | | | d[b]:1 | d[b]:2 | d[b]:1 | | | d[d]:1 | d[d]:2 | |
对于准确性:
准确度= 9/3
据我了解,这比运行两个单个流并将其组合更为准确。但是,这与Wikipedia上的说法相矛盾:
算法输出的摘要(数组)可以在 感觉到两个流s和r的总结通过相加来组合 按键排列数组,然后减少结果中的每个计数器 数组,直到仅保留k个键,结果相同(或 与运行Misra-Gries算法相比 s与r的串联。
那我的错误在哪里?
P.S。我确实想为这些公式提供图像,但由于信誉<10 ......
而被禁止