如何记忆一个多维数组的生成方法

问题描述:

我有一个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*yy*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