コード例 #1
0
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)
コード例 #2
0
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)
コード例 #3
0
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)
コード例 #4
0
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)
コード例 #5
0
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))


    
    
コード例 #6
0
#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))