Below is an implementation of MemoIzation written in PythonLanguage. Is this technique possible or even applicable in OO languages like Java? -- AdewaleOshineye
#!/usr/bin/python """Take a function f and return a function fm that is the same as f except it uses cacheing. Uses Python 2.2 Author: AdewaleOshineye """ import time def memoize(f): cache = {} def fm(*args): if args not in cache: cache[args] = f(*args) return cache[args] return fm def test(function, arguments, iterations): startTime = time.time() for x in range(iterations): result = function(*arguments) endTime = time.time() print "Result is ", result return endTime - startTime if __name__=='__main__': TEST_ITERATIONS = 1000000 def factorial(n): if n > 1: return n * factorial(n-1) else: return 1 def intersperse(arg1, arg2): return arg1.join(arg2) factorial2 = memoize(factorial) intersperse2 = memoize(intersperse) functions = [intersperse, intersperse2, factorial, factorial2] arguments = [("|", "HelloWorld"),("|", "HelloWorld"),(10,),(10,)] index = 0 for f in functions: print "Testing %s took %.3f seconds" % (f.__name__, test(f, arguments[index], TEST_ITERATIONS)) index += 1
Implementations in other languages are desired.