我已经针对我在 C 中的基本实现在 C++ 和 Python 标准库(队列和堆)之间进行了快速性能测试。这是我使用过的:
- Python 2.7.5 :: Anaconda 1.7.0 (x86_64)
- i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1
- 要排序的元素是整数。
对队列构造段的性能差异并不感到惊讶(我的意思是从元素数组创建排序堆)。
这有点奇怪。我不知道我是否遗漏了什么……为什么 C++ 提取元素需要这么长时间?这是在 C++ 上构建优先级队列的正确方法吗?
对于 Python,我的实现看起来像这样
# Construct the queue
heapq.heapify(int_values)
# Extract element
heapq.heappop(int_values)
在 C++ 中:
// Construct the queue
std::priority_queue<int, std::vector<int>, std::greater<int> > mypq (int_values, int_values+elements);
// Extract element
mypq.pop();
这是完整的 C++ 代码,以及我如何测量时间。 https://gist.github.com/srodrb/6916802
这是 Python 代码: https ://gist.github.com/srodrb/6917081
编辑:请注意,我并没有假装优化我的 C++ 代码,这个比较对我来说是有效的,因为我正在测试开箱即用的标准库的工具。我只是想知道巨大的性能差距。此外,我没有将 C++ 与 Python 进行对比,因为 heapq 可能调用了一些 C 函数。