【问题标题】:What memory requirements do ruby subarrays add?ruby 子数组添加了哪些内存要求?
【发布时间】:2020-08-15 06:51:46
【问题描述】:

我试图了解传递子数组的递归算法和将索引传递给同一数组的递归算法之间的内存使用差异,特别是参考 Ruby 的内存处理。我一直在努力寻找有关 Ruby 子数组如何以这种详细程度工作的文档。

例如在二进制搜索中,您的递归函数可能如下所示:

def search(list, target, low, high)

其中highlow 是索引,在方法主体中,一行如下所示:

if list[mid_index] < target
  return search(list, target, mid_index + 1, high)

在这里,我们总是在方法之间传递相同的列表。

或者,同样的代码可以写成:

def search(list, target)
...
if list[mid_index] < target
  return search(list[(mid_index + 1)..list.length - 1], target)

在第二种情况下,看起来我正在传递数组的子集(只是对相同对象的引用?),但我实际上是通过使用 [] 运算符还是通过将它们用作方法参数?

【问题讨论】:

标签: arrays ruby memory binary-search


【解决方案1】:

我一直在努力寻找有关 Ruby 子数组如何以这种详细程度工作的文档。

我认为documentation of Array#[] 很清楚(粗体强调我的):

ary[start, length]new_arynil

采用开始和结束索引的Array#[] 形式(以及采用Range 的形式)返回一个新数组,而不是某种切片 或 view 共享底层数组的数据类型。 (尽管请注意,当然,允许任何实现在不改变程序的任何可观察属性的情况下执行这种优化。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 2019-12-24
    • 2018-03-03
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    相关资源
    最近更新 更多