如何记忆一个多维数组的生成方法
问题描述:
我有一个table_data
方法用于为乘法表建立一个多维数组。表格的第一行和第一列是相同的,每个单元格包含相应行和列的产品。下面是它最终打印的内容:如何记忆一个多维数组的生成方法
2 3 4 . . n
2 4 6 8
3 6 9 12
4 8 12 16
.
.
n
正如你所看到的,有很多重复记录可以被记录。下面是生成多维数组的代码:
def table_data(n)
table_header(n).map do |x|
table_header(n).map do |y|
x*y
end
end
end
def table_header(n)
@header_data ||= (1..n).to_a
end
table_data
方法需要二次时间;它正在做两倍的必要工作(对于x*y
和y*x
)。如何记忆和/或更改此方法以减少运行时间?
答
在减少运行时间方面,取决于您是否认为x*y
的操作可以忽略不计。如果你用某种SQL查询或更具成本效益的东西替换它,那么缓存它就会有意义。但是就大的O复杂度而言,这里的动态变量是表格的宽度/高度,例如,我没有看到一个好的减少方法的迭代次数。
反正缓存x*y
你可以做一个辅助类这样
class MultiplicationCache
def initialize
@cache = {}
end
def multiply(a,b)
@cache[[a,b].sort] ||= a * b
end
end
# usage
cache = MultiplicationCache.new
puts cache.multiply(1,2) # => 2
再次,它并没有真正意义的做到这一点,除非你的东西,真的是计算昂贵的更换x*y
。