标签: programming-pearls

编程珍珠中的qsort函数出错?

编程珍珠只是我或者这个代码是错误的(quicksort想要2个const空洞,不是吗?)如果是这样,我的解决方案是对的吗?道歉,只是学习......

int wordncmp(char *p, char* q)
{   int n = k;
    for ( ; *p == *q; p++, q++)
        if (*p == 0 && --n == 0)
            return 0;
    return *p - *q;
}

int sortcmp(char **p, char **q)
{   return wordncmp(*p, *q);
}
...

qsort(word, nword, sizeof(word[0]), sortcmp);
Run Code Online (Sandbox Code Playgroud)

这是一个解决方案吗?

int sortcmp(const void *p, const void *q)
{   return wordncmp(* (char * const *) p, * (char * const *) q);
}
Run Code Online (Sandbox Code Playgroud)

c std qsort programming-pearls

4
推荐指数
1
解决办法
593
查看次数

通过使用更多空间来实现恒定的初始化时间-编程珍珠 - 第 1 栏

我正在阅读《Programming Pearls》,我对其中一个解决方案的解释感到非常困惑——第 1 列中的问题 9。

问题是:当使用位图数据表示一组整数时,第一阶段将该组初始化为空。但初始化空间本身可能会花费大量时间。展示如何通过设计一种在第一次访问向量时将向量条目初始化为零的技术来规避此问题。

答案是:初始化向量数据[0...n-1] 的效果可以通过包含在两个附加 n 元素向量fromto以及整数top 中的签名来实现。如果元素 data [i] 已初始化,则from [i] < topto [*from*[i]] = i。因此,from是一个简单的签名,totop一起确保from不会被内存的随机内容意外签名。

这个答案我已经读过好几遍了。我不明白。

有人可以解释一下吗?

谢谢,

initialization bitmap programming-pearls

4
推荐指数
1
解决办法
443
查看次数

编程珍珠:在 40 亿个整数的文件中查找丢失的整数

问题:输入位于顺序文件上。该文件最多包含 40 亿个整数。找出缺失的整数。

根据我的理解解决方案:

  1. 制作两个临时文件,一个以 0 开头,另一个以 1 开头

  2. 两个必须(4.3B 鸽子和 4B 鸽子)之一的分数必须低于 2B。选择文件并在第二位重复步骤 1 和 2,然后在第三位重复步骤 1 和 2,依此类推。

本次迭代的结束条件是什么?

另外,书中提到算法的效率是 O(n),但是,

第一次迭代 => n 个探测操作
第二次迭代 => n/2 个探测操作



n + n/2 + n/4 +... 1 => nlogn??

我错过了什么吗?

algorithm programming-pearls

3
推荐指数
1
解决办法
2426
查看次数

调试和二进制搜索

第2列("AHA!算法")中的"编程珍珠"讨论了二进制搜索如何帮助各种过程,如排序,树遍历.但它提到二进制搜索可以用于"程序调试".有人可以解释一下这是怎么做的吗?

debugging binary-search programming-pearls

2
推荐指数
4
解决办法
1484
查看次数