ruby 子数组增加了哪些内存要求?
What memory requirements do ruby subarrays add?
我试图了解传递子数组的递归算法与将索引传递到同一数组的递归算法之间的内存使用差异,特别是参考 Ruby 的内存处理。我一直在努力寻找有关 Ruby 子数组如何在该详细级别工作的文档。
例如在二进制搜索中,您的递归函数可能如下所示:
def search(list, target, low, high)
其中 high
和 low
是索引,在方法体中有一行看起来像这样:
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)
在第二种情况下,看起来我正在传递数组的一个子集(只是对相同对象的引用?),但我实际上是在创建列表的副本,或者使用 []
运算符,或者将它们用作方法参数?
I've struggled to find documentation on how Ruby subarrays work in that level of detail.
我认为 documentation of Array#[]
非常清楚(粗体 强调我的):
ary[start, length]
→ new_ary
or nil
采用开始和结束索引的 Array#[]
形式(以及采用 Range
的形式)return 一个 新数组,而不是共享底层数组的某种 slice 或 view 数据类型。 (尽管请注意,当然,只要不改变程序的任何可观察属性,任何实现都 允许 在幕后执行此类优化。)
我试图了解传递子数组的递归算法与将索引传递到同一数组的递归算法之间的内存使用差异,特别是参考 Ruby 的内存处理。我一直在努力寻找有关 Ruby 子数组如何在该详细级别工作的文档。
例如在二进制搜索中,您的递归函数可能如下所示:
def search(list, target, low, high)
其中 high
和 low
是索引,在方法体中有一行看起来像这样:
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)
在第二种情况下,看起来我正在传递数组的一个子集(只是对相同对象的引用?),但我实际上是在创建列表的副本,或者使用 []
运算符,或者将它们用作方法参数?
I've struggled to find documentation on how Ruby subarrays work in that level of detail.
我认为 documentation of Array#[]
非常清楚(粗体 强调我的):
ary[start, length]
→new_ary
ornil
采用开始和结束索引的 Array#[]
形式(以及采用 Range
的形式)return 一个 新数组,而不是共享底层数组的某种 slice 或 view 数据类型。 (尽管请注意,当然,只要不改变程序的任何可观察属性,任何实现都 允许 在幕后执行此类优化。)