Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么在已知性能差异的情况下,二进制搜索函数的C#ticks是相似的?_C#_Algorithm_Search_Binary - Fatal编程技术网

为什么在已知性能差异的情况下,二进制搜索函数的C#ticks是相似的?

为什么在已知性能差异的情况下,二进制搜索函数的C#ticks是相似的?,c#,algorithm,search,binary,C#,Algorithm,Search,Binary,所以我试图用带有和不带可查找键的数组来描述二进制搜索的性能 已知在具有当前密钥的数组上进行的二进制搜索是:log_2(n)-1 无:log_2(n)+1 我编写了一个数组生成器函数,并使用了我用C#实现的二进制搜索的教科书版本。我在类中放置了一个名为“sw”的秒表对象。arrayCreator采用true/false来确定是否应该存在密钥。密钥是全局存储的 main看起来是这样的,其中我用于增加其数组输出中的项数,true/false将全局键设置为数组中存在的值或不存在的值(这有望增加我将度量的

所以我试图用带有和不带可查找键的数组来描述二进制搜索的性能

已知在具有当前密钥的数组上进行的二进制搜索是:log_2(n)-1

无:log_2(n)+1

我编写了一个数组生成器函数,并使用了我用C#实现的二进制搜索的教科书版本。我在类中放置了一个名为“sw”的秒表对象。arrayCreator采用true/false来确定是否应该存在密钥。密钥是全局存储的

main看起来是这样的,其中我用于增加其数组输出中的项数,true/false将全局键设置为数组中存在的值或不存在的值(这有望增加我将度量的时间)


for(int i=500;i您无法使用秒表测量它,尤其是log2(n)+1和log2(n)-1之间的差异。此外,一个具有50000的数组(我猜,因为您没有指定数组创建者返回的内容)元素对于二进制搜索来说是小菜一碟。毫秒很难精确地捕捉到它。尝试使用经过的刻度。我怀疑你是否能捕捉到这么小的差异。

我们怎么可能通过传递
false而不是
tr来知道完成
arrayCreator
所需的时间是上升还是下降ue
如果您没有发布该函数的功能?而且,这不是滴答数,而是毫秒数。您希望
O(log(n)-1)
O(log(n)+1)
之间存在可测量的差异,因为n增长到大集?我没有。二进制搜索是O(log2(n))。只有在仍忙于缩小搜索范围的情况下才能找到密钥,这样速度才会更快。只有当密钥副本很多时才会出现这种情况。Crystal ball说这不是您的arrayCreator()所说的情况方法有。@Camiloteriento,哦,我不是在测量完成arrayCreator所需的时间。我在我的问题中说过。二进制搜索是众所周知的-你可以在互联网上找到它。arrayCreator在我测量操作数时起作用-它的唯一目的是创建数组,无论有没有当前键。我是在测量时间二进制搜索的差异,应该会更改是否存在键。编辑我的问题以显示刻度(意外地保留毫秒)。@Tim,为什么不?当我增加集合和测量操作时,它以这种方式增加。这是不可能的吗?抱歉,arrayCreator返回一个提供的大小(I)的数组.我尝试了计时,它成功了(我在原来的问题中出错,说是毫秒),但成功的阵列和失败的阵列之间没有太大区别。但是,当我只是测量操作而不是时间时,有一个完全匹配的差异。问题是问我是否做得对,以及系统是否会影响滴答声。谢谢你的回答。
for (int i = 500; i <= 50000; i += 500)
{
    for (int j = 0; j < 10000; j++)
    {
        int[] arrayCreated = arrayCreator(i, true);
        sw.Start();
        BinarySearch(arrayCreated, key);
        sw.Stop();
    }

    ticks = sw.ElapsedTicks;
    sw.Reset();
    Console.WriteLine(ticks);
    ticks = 0;
}