I**A 发帖数: 2345 | 1 我糊涂了。。
Pg 127上的那个genknuth(int m, int n)算法
明明不能select exactly m integers啊,
为嘛作者大师说能?
大家给我解解惑please... |
v***u 发帖数: 40 | |
d**e 发帖数: 6098 | 3 那一页第一行开始就是解释。
由于m<=n,那么总有一个i = n - m,那if里是true,
然后m--,(bigrand()%(n-i)
直到m=0,这时就肯定是输出m个数
【在 I**A 的大作中提到】 : 我糊涂了。。 : Pg 127上的那个genknuth(int m, int n)算法 : 明明不能select exactly m integers啊, : 为嘛作者大师说能? : 大家给我解解惑please...
|
I**A 发帖数: 2345 | 4 问题我就是没看明白他的解释。。
而且我拿程序测试了,不是m个数儿
【在 d**e 的大作中提到】 : 那一页第一行开始就是解释。 : 由于m<=n,那么总有一个i = n - m,那if里是true, : 然后m--,(bigrand()%(n-i): 直到m=0,这时就肯定是输出m个数
|
d**e 发帖数: 6098 | 5 你看得还真快啊,我跟你同一天买的,我还一页没翻过 -_-!
【在 I**A 的大作中提到】 : 我糊涂了。。 : Pg 127上的那个genknuth(int m, int n)算法 : 明明不能select exactly m integers啊, : 为嘛作者大师说能? : 大家给我解解惑please...
|
I**A 发帖数: 2345 | 6 哈哈哈,coupon是我给找的不?
我关键是下周要用。。。
【在 d**e 的大作中提到】 : 你看得还真快啊,我跟你同一天买的,我还一页没翻过 -_-!
|
d**e 发帖数: 6098 | 7 对……你给的。。。 谢谢哈。。。
唉,说起惭愧,我还没机会用 -_-!
【在 I**A 的大作中提到】 : 哈哈哈,coupon是我给找的不? : 我关键是下周要用。。。
|
d**e 发帖数: 6098 | 8 刚写了一下,出来的结果是对的,不知你是不是某一步写错了。
#include
#include
#include
using namespace std;
void genknuth(int m, int n)
{
for(int i = 0; i < n; i++)
{
if(rand() % (n-i) < m)
{
cout << i << endl;
m--;
}
}
}
int main(int argc, char * argv[])
{
srand(time(0));
genknuth(15, 20);
return 0;
}
【在 I**A 的大作中提到】 : 问题我就是没看明白他的解释。。 : 而且我拿程序测试了,不是m个数儿
|
I**A 发帖数: 2345 | 9 不客气
请你继续去钻研那个pg 127
以后你肯定用得着
我撤了
【在 d**e 的大作中提到】 : 对……你给的。。。 谢谢哈。。。 : 唉,说起惭愧,我还没机会用 -_-!
|
I**A 发帖数: 2345 | 10 我用Java写的
public static void genKnuth(int m, int n)
{
Random myr = new Random();
for(int i=0; i
if((myr.nextInt() % (n-i)) < m){
System.out.print(i + " ");
m--;
}
}
public static void main(String[] args) {
genKnuth(5,20);
}
产生的总是多于5个。。
难道这个random function有问题???我觉得不应该啊。
而且我把你的解释和作者的解释又看了好几遍,还是没明白。。
【在 d**e 的大作中提到】 : 刚写了一下,出来的结果是对的,不知你是不是某一步写错了。 : #include : #include : #include : using namespace std; : void genknuth(int m, int n) : { : for(int i = 0; i < n; i++) : { : if(rand() % (n-i) < m)
|
|
|
d**e 发帖数: 6098 | 11 debug过,才知道java的Random.nextInt()可正可负的 -_-!
一直以为是非负的。
所以恰恰解释了为什么会多过m个.
用Random.nextInt(int)这个函数才产生非负。
所以改成 myr.nextInt(n)就可以了。
【在 I**A 的大作中提到】 : 我用Java写的 : public static void genKnuth(int m, int n) : { : Random myr = new Random(); : for(int i=0; i: if((myr.nextInt() % (n-i)) < m){ : System.out.print(i + " "); : m--; : } : }
|
I**A 发帖数: 2345 | 12 多谢!
的确是改成getNext(n)就对了。
啊, 我终于明白了为嘛是exactly m integers了,笨~~
【在 d**e 的大作中提到】 : debug过,才知道java的Random.nextInt()可正可负的 -_-! : 一直以为是非负的。 : 所以恰恰解释了为什么会多过m个. : 用Random.nextInt(int)这个函数才产生非负。 : 所以改成 myr.nextInt(n)就可以了。
|
d**e 发帖数: 6098 | |
I**A 发帖数: 2345 | 14 thanks thanks...:)
【在 d**e 的大作中提到】 : 下周onsite吧,祝成功:p
|
K******g 发帖数: 1870 | 15 大家不觉得programming pearls里很多东西是废话吗?仔细看了大半天,拗口难懂的表
达,结果对面试什么帮助都没有 (除了少数几个算法)。
我真的不明白,为什么那么多人反复推荐那本书。
比如说LZ讲的那个算法,在P129页上面不是有个更简单的吗?为什么要反复的讲解那个
P127页那个呢,我觉得很多地方是浪费时间。
【在 I**A 的大作中提到】 : thanks thanks...:)
|
l******e 发帖数: 12192 | 16 kinda agree. hehe
【在 K******g 的大作中提到】 : 大家不觉得programming pearls里很多东西是废话吗?仔细看了大半天,拗口难懂的表 : 达,结果对面试什么帮助都没有 (除了少数几个算法)。 : 我真的不明白,为什么那么多人反复推荐那本书。 : 比如说LZ讲的那个算法,在P129页上面不是有个更简单的吗?为什么要反复的讲解那个 : P127页那个呢,我觉得很多地方是浪费时间。
|