to beta: 哈哈,我就知道您很有可能把基本连续当成不连续的情况.
您看到我前面讲的:
“ 设法根据实际情况构造一个hash函数 function H(i:Integetr):Integer;
使得各个值基本连续就可以了”
* * * *
了吗?
其实,在编译Case语句时,Delphi会对选项进行一个排序,然后对选型的连续情况作出判断,
判断是否有必要用空间换取效率,这样看来您的“选项相差的极限是15”也是不对的,
因为Delphi要对若干种情况进行判断。
我举若干个例子:
1. 1,3,5,7,9,11,13,19,21,23,35 //基本连续,会生成地址表
2. 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,36,37,38,39,40,41,42,43,
* *
44,45,46,47,48,49,50,51,52,53,54,55 //基本连续,会生成地址表
3. 1,6,11,16,21,26,31,36,41,46,51 //不是基本连续,不会生成地址表
4. 1, 101, 233, 532, 1018, 2129, 2972, 3072, 4083, 5009, 5389 //不是基本连续,不会生成地址表
当然,如果Delphi的版本不同,判断连续的标准是不同的,但基本的趋势是这样的。
另外,我要说明,Case实际上是使用近似折半搜索法来进行搜索的,
因此无法根据各种情况出现的效率,象If一样进行调整。
“该说的都说得差不多了,介于说过了的原因,如果没有意外,我不会再在这个帖子回复了。”
因为您只认为“我们没有去试验而只有您去试验的”,并没有静下心来看我写的东西,
所以才会造成你没有深究的原因。没想到您居然是这样的不事实求是。唉!
另外,只要新手仔细看了本帖,他也因该能够分清情况,希望您不要低估了其他的人。(只是建议而已)