不同输入情况的 Splay 树插入时间效率

Splay Tree insertion time efficiency with different input cases

提问人:Kenny Ynnek 提问时间:1/6/2023 最后编辑:273KKenny Ynnek 更新时间:1/7/2023 访问量:63

问:

所以我使用了与 geeksforgeeks 相同的 splaytree 并做了一些实验:

代码: https://www.geeksforgeeks.org/insertion-in-splay-tree/?ref=rp

版本1

    #include <ctime>
    // the code for splaytree is too long so I just put the link here: https://www.geeksforgeeks.org/insertion-in-splay-tree/?ref=rp
    double t1=clock();
    for(int i = 0; i < 1000000; i++)
    {
        x = rand()%max_x;
        root = insert(root, x);
    }

    double t2=clock();
    double result = (t2-t1)/CLOCKS_PER_SEC;
    printf("insertion time: %f\n", result);

第2版

    int x;
    double t1=clock();
    for(int i = 0; i < 1000000; i++)
    {
        x = rand()%max_x;
        root = insert(root, i);
    }

    double t2=clock();
    double result = (t2-t1)/CLOCKS_PER_SEC;
    printf("insertion time: %f\n", result);

输出:

对于版本。1:插入时间为vers。2:插入时间为cpp insertion time: 0.779000insertion time: 0.156000

我知道 Splay 树每次插入时都会“张开”,所以考虑到有时可能会产生相同的输出,为什么当 splay 树需要 1000000 个不同的输入时,它的运行速度要快得多?这对我来说没有任何意义。(我是一名学生,是的,我的英语不好,很抱歉)。rand

编辑:

我将 vers.2 修改为:

    int x;
    double t1 = clock();
    for(int i = 0; i < 1000000; i++)
    {
        x = rand()%max_x;
        printf("%d",x);
        root = insert(root, i);
    }

    double t2=clock();
    double result = (t2-t1)/CLOCKS_PER_SEC;
    printf("insertion time: %f\n", result);

修改后的 Vers.2 输出:

 ....a bunch of numbers...time: 0.569000

仍然比 vers 快。1

C++ 数据结构 插入 splay-tree

评论

0赞 Quimby 1/6/2023
在第一种情况下,您插入的是随机值,在第二种情况下,您只插入随机值。那不是同一个基准吗?
0赞 Kenny Ynnek 1/6/2023
对不起,这是一个错别字,但结果是相似的,它仍然比第一种情况快得多i
0赞 Ted Lyngmo 1/6/2023
通话会减慢速度。您正在比较我假设的优化版本吗?rand()
0赞 Kenny Ynnek 1/6/2023
我把它修改为仍然比第一种情况快得多cpp for(int i = 0; i < 1000000; i++) { x = rand()%max_x; root = insert(root, i); }
1赞 Ted Lyngmo 1/6/2023
由于您没有使用编译器,因此很可能会将该调用抛出 vers.2。xrand

答: 暂无答案