Java 跳过列表中的随机级别函数

Java 跳过列表中的随机级别函数,java,Java,我正在看,我想知道以下方法的目的: public static int randomLevel() { int lvl = (int)(Math.log(1.-Math.random())/Math.log(1.-P)); return Math.min(lvl, MAX_LEVEL); } 上述方法与其他方法有什么区别 Random.nextInt(6); 有人能解释一下吗?谢谢。就像链接上说的那样 “这使我们有50%的几率随机_level()函数返回0,25%的几率返回1

我正在看,我想知道以下方法的目的:

public static int randomLevel() {
    int lvl = (int)(Math.log(1.-Math.random())/Math.log(1.-P));
    return Math.min(lvl, MAX_LEVEL);
}
上述方法与其他方法有什么区别

Random.nextInt(6);

有人能解释一下吗?谢谢。

就像链接上说的那样

“这使我们有50%的几率随机_level()函数返回0,25%的几率返回1,12.5%的几率返回2,依此类推…”因此分布不均匀。但是,Random.nextInt()是。选择0和5之间的任何数字的可能性相同

我还没有看完整的实现,但可能发生的是randomLevel()我们用来选择一个数字,比如n。然后,需要添加到skiplist的元素将具有指针0、1、…、n。您可以将每个级别视为一个单独的列表

为什么要使用这样的分发?一个均匀的分布需要太多的内存来实现它所带来的好处。通过使用几何分布减少机会,达到“最佳”点。现在实现了快速获取值、占用较小内存的优势

应提供一个随机变量,其概率分布(大约)在区间[0,6]上为a。 你可以了解更多有关这方面的信息。

请注意,内部
Random
使用where


randomLevel
而是(大约)使用了一个p=0.5的公式。您可以了解有关分布的更多信息

本质上,
randomLevel
以0.5的概率返回
0
1
以0.25的概率返回,
2
以0.125的概率返回,以此类推,直到
6
以0.5^7的概率返回,.*0.0078125**-与~0.14的
Random.nextInt


现在重要的是,通过利用多个稀疏级别的链表,它们可以实现O(logn)的平均运行时性能搜索-类似于平衡二叉搜索树,但不太复杂,并且使用更少的空间,了解如何进行搜索,因为与较低级别相比,较高级别的用户密度较低(:下面,级别向下增长)--这是快速搜索所必需的


根据几何分布公式,等级应该是int lvl=(int)(Math.log(Math.random()/p)/Math.log(1.-p))而不是int lvl=(int)(Math.log(1.-Math.random())/Math.log(1.-p));原因是什么?cdf是
F(k)=1-(1-p)^k
,因此我们找到
k=log(1-F(k))/log(1-p)