【问题标题】:How is quicksort is related to cache?快速排序与缓存有何关系?
【发布时间】:2012-03-15 17:27:29
【问题描述】:

我看到很多地方都说快速排序很好,因为它适合缓存相关的东西,比如wiki中说的

此外,快速排序的顺序和本地化内存引用可以很好地与缓存一起使用

http://en.wikipedia.org/wiki/Quicksort

谁能告诉我有关此声明的一些见解?快速排序与缓存有何关系?通常,语句中的缓存是什么意思?为什么快速排序更适合缓存?

谢谢

【问题讨论】:

标签: algorithm caching sorting data-structures


【解决方案1】:

快速排序在原地更改数组 - 在它正在处理的数组中[不像合并排序,例如 - 它为它创建一个不同的数组]。因此,它应用了locality of reference 的原理。

缓存受益于对内存中同一位置的多次访问,因为只有第一次访问需要实际从内存中获取 - 其余访问来自缓存,这比访问内存要快得多。

例如,合并排序 - 需要更多的内存 [RAM] 访问 - 因为您创建的每个附件数组 - 都会再次访问 RAM。

树更糟糕 - 因为树中的 2 个顺序访问不太可能彼此靠近。 [缓存是按块填充的,因此对于顺序访问 - 只有块中的第一个字节是“未命中”,其他字节是“命中”]。

【讨论】:

  • 我相信你说的确实是答案。但是你能举个例子来说明快速排序和缓存的关系吗?
【解决方案2】:

进入缓存的内容由算法决定,这些算法几乎可以根据您当前的请求猜测您将很快使用的内容。这通常意味着彼此靠近的内存块,例如数组。

经过几次迭代后,快速排序将处理完全适合缓存的块,这大大提高了性能。 (与选择排序相比,它可能会访问与大多数操作相距很远的内存位置。)

【讨论】:

    【解决方案3】:

    快速排序是一种就地排序算法。它通过使用交换将元素移动到枢轴的左侧和右侧。每次发生交换时,很可能会加载缓存行,随后的交换将从同一缓存行发生。

    【讨论】:

      猜你喜欢
      • 2019-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多