如何仅仅知道第一个和最后一个项目而不是项目数量,您是如何估计迭代一组的进度的呢?
AAAAAAA
....
....
....?
....
....
ZZZZZZZZZZZZ
保证第一个和最后一个项目是整个集合的字典最小值和最大值。可以假设项目值的分布接近均匀。您收到物品的顺序是未知的,可能无法预测或可能是有序的。物品保证是独一无二的。
如果估计值随着时间的推移一般接近99.999%而波动就可以了。
这让我想起了German tank problem,除了(据我所知)没有一种方法可以减去或缩短词典顺序中项目之间的距离。例如,我正在考虑接收最大项目并将其与最后一项进行比较,但我不知道如何获得任意项目之间的“距离”。
背景:我在mapreduce作业中使用了映射器,使用这些键并且无法报告任务跟踪器假定任务被卡住并且开始在相同数据上产生推测性冗余映射的百分比进度。
答案 0 :(得分:1)
您可以通过排列等级找到距离: http://www.geeksforgeeks.org/lexicographic-rank-of-a-string/
你要做的是计算每个字符串的等级并减去距离。
答案 1 :(得分:1)
您可以处理字符串" S 1 S 2 ... S n "作为一个等于S 1 / N + S 2 / N ^ 2 + ... + S n / N ^ n的数字,其中N是字母表的大小。换句话说,字符串的字符是该数字的N元表示的逗号之后的数字。
然后你可以使用这些数字之间的差异作为字符串之间的距离,它相对于词典顺序是单调的。