【问题标题】:Can red-black tree be used for best-fit algorithm?红黑树可以用于最佳拟合算法吗?
【发布时间】:2020-07-10 12:22:51
【问题描述】:

我知道最佳拟合算法必须搜索整个列表才能找到花费 O(n) 的最佳内存块,所以我正在考虑使用红黑树来改善运行时间O(logN)。是否存在红黑树不适用于最佳拟合的情况?如果是这样,有人可以给我一个例子吗?谢谢。

【问题讨论】:

  • 您能详细说明一下“最适合”吗?我不确定你是什么意思。一个例子就足够了。
  • 假设输入是一个数字列表另一个数字x = 3。如果列表有3,我们输出3,如果没有,我们必须输出大于3的最小数字。例如:输入{4,6,8,3,1,2}, x = 3 => 输出 3 输入 {4,6,8,3,1,2}, x = 5 => 输出 6

标签: algorithm tree allocator


【解决方案1】:

红黑树可以正常工作,但这不是一个很好的选择。

由于充分利用 O(size) 字节需要 O(size) 时间,因此最好使用某种类型的手指搜索树,它可以更快地找到小块,但会花费更多时间来查找大块:https://en.wikipedia.org/wiki/Finger_search_tree

此外,您可能只想为一些可能的最小尺寸设置单独的空闲列表。当您搜索并更新搜索树时,您可能会遇到多个缓存行。在 x86 上,每个缓存行是 64 字节,因此只需一个缓存行就足以存储 8 个空闲列表的头指针。如果将 8 个最小大小的空闲列表的头指针放在一个缓存行中,那么分配这些大小的块会快得多。

这还允许您分配小于红黑树节点的块。

【讨论】:

    【解决方案2】:

    如果您要构建一棵红黑树来执行您所描述的操作,那么有更好的选择。

    给定n 元素,红黑树的构建时间为 O(n log n)。对数组进行排序和使用二分查找是同时进行的,这种方式更简单,性能也很好。

    如果元素不断添加到数组中,显然树会更好。

    【讨论】:

      猜你喜欢
      • 2021-10-17
      • 2021-12-22
      • 2011-03-27
      • 2011-04-15
      • 2011-09-08
      • 2013-02-01
      • 2017-07-24
      • 2013-01-08
      相关资源
      最近更新 更多