1

我已经针对我在 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 函数。

4

1 回答 1

0

只需在数组/向量上使用make_heappop_heap 即可。

于 2013-10-10T11:19:22.487 回答