Tag: 偏斜

C实现倾斜堆

我正在尝试在C中实现一个倾斜堆,但我的代码不能编译。 我不是那种经验丰富的C而且从来没有在C中创建任何类型的堆。这就是为什么我不知道如何修复它,我希望有人可以指出我正确的方向。 我一直在读关于倾斜堆的文章,这是我到目前为止使用我在网上找到的算法得到的。 提前致谢。 typedef struct node { int value; struct node * root; struct node * leftchild; struct node * rightchild; } Node; struct skewHeap { struct node * root; }; void skewHeapInit (struct skewHeap * sk) { sk->root = 0; } void skewHeapAdd (struct skewHeap *sk) { struct node *n = (struct node […]

“n *(rand()/ RAND_MAX)”是否会产生偏斜的随机数分布?

我想找到一种在C中获取随机数的无法解释的方法(尽管最多我会将它用于0-20的值,更可能只有0-8)。 我已经看过这个公式,但经过一些测试后,我不确定它是否有偏差。 有帮助吗? 这是使用的完整function: int randNum() { return 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0))); } 我使用以下方法播种: unsigned int iseed = (unsigned int)time(NULL); srand (iseed); 下面建议的那个拒绝为我工作,我试过了 int greek; for (j=0; j<50000; j++) { greek =rand_lim(5); printf("%d, " greek); greek =(int) (NUM * (rand() / (RAND_MAX + 1.0))); int togo=number[greek]; number[greek]=togo+1; } 当我注释掉printf时,它停止工作并给我相同的数字50000次。