def profile(): print "100 elem DP", timeit.Timer(lambda: non_decreasing_seq(array(100))).timeit(3) print "1000 elem DP", timeit.Timer(lambda: non_decreasing_seq(array(1000))).timeit(3) # print "5000 elem DP", timeit.Timer(lambda: non_decreasing_seq(array(5000))).timeit(1) # print "10000 elem DP", timeit.Timer(lambda: non_decreasing_seq(array(10000))).timeit(1) print "50 elem brute force", timeit.Timer(lambda: non_decreasing_seq_brute(array(50))).timeit(3) print "80 elem brute force", timeit.Timer(lambda: non_decreasing_seq_brute(array(100))).timeit(1)
def profile(): print "100 elem DP", timeit.Timer( lambda: non_decreasing_seq(array(100))).timeit(3) print "1000 elem DP", timeit.Timer( lambda: non_decreasing_seq(array(1000))).timeit(3) # print "5000 elem DP", timeit.Timer(lambda: non_decreasing_seq(array(5000))).timeit(1) # print "10000 elem DP", timeit.Timer(lambda: non_decreasing_seq(array(10000))).timeit(1) print "50 elem brute force", timeit.Timer( lambda: non_decreasing_seq_brute(array(50))).timeit(3) print "80 elem brute force", timeit.Timer( lambda: non_decreasing_seq_brute(array(100))).timeit(1)
def should_generate_largest_subsequence_random_input(algorithm): assert_correct_length(array(10), algorithm) assert_correct_length(array(10), algorithm) assert_correct_length(array(20), algorithm) assert_correct_length(array(15), algorithm) assert_correct_length(array(20), algorithm) assert_correct_length(array(30), algorithm)
def all_possible(a, i): if not a or i >= len(a): return [] seqs = all_possible(a, i + 1) if not seqs: return [[a[i]]] newSeqs = [[a[i]]] for seq in seqs: if a[i] < seq[0]: newSeqs.append([a[i]] + seq ) return newSeqs + seqs def non_decreasing_seq_brute(a): print a s = all_possible(a, 0) return reduce((lambda a, b: a if len(a) > len(b) else b), s, []) from intro_to_algos.sort.arrays import array if __name__ == '__main__': print non_decreasing_seq_brute(array(10)) print non_decreasing_seq_brute(array(30)) # print non_decreasing_seq_brute(array(50)) #too slow # print non_decreasing_seq_brute(array(70)) # print non_decreasing_seq_brute(array(100))
#suffix DP problem def all_possible(a, i): if not a or i >= len(a): return [] seqs = all_possible(a, i + 1) if not seqs: return [[a[i]]] newSeqs = [[a[i]]] for seq in seqs: if a[i] < seq[0]: newSeqs.append([a[i]] + seq) return newSeqs + seqs def non_decreasing_seq_brute(a): print a s = all_possible(a, 0) return reduce((lambda a, b: a if len(a) > len(b) else b), s, []) from intro_to_algos.sort.arrays import array if __name__ == '__main__': print non_decreasing_seq_brute(array(10)) print non_decreasing_seq_brute(array(30)) # print non_decreasing_seq_brute(array(50)) #too slow # print non_decreasing_seq_brute(array(70)) # print non_decreasing_seq_brute(array(100))