So, I've just started following coursera.org's new algorithm course. Since the course is in JAVA, and I don't want to learn Java+algorithms at the same time, I'm "translating" the JAVA samples to python. However, I'm a bit stuck, since the algorithms which should be quicker are performing worse. The weird bit to me, is that with a big input when I run the tests, the slower algorithm is the fastest,... and I think this has to do with something weird that's happening with the array (ids) that I instantiate the different objects with:
import time
from utils.benchmark import *
from quickunion import *
from quickunion_weighted import *
from quickfind import *
# create only one array of id's so the comparison is fair
ids = random_tree(10)
my_trees = [QuickFindUF, QuickUnionUF, 
        QuickUnionWeighted, QuickUnionPathCompression]
print "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n"
def test(classes, tree):
    for e in classes:
        tmp = e(arr=tree)
        print tmp.id
        print "%s:" % tmp.__class__.__name__
        t = time.clock()
        print "\tare 3 and 6 connected?: %s" % tmp.connected(3, 6)
        "\tunion(3, 6): "
        tmp.union(3,6)
        print "\tare 3 and 6 connected?: %s" % tmp.connected(3, 6)
        print "Total time: {0} ".format(time.clock()-t)
if __name__ == '__main__':
    test(my_trees, ids)
This prints the following results:
[1, 8, 1, 7, 4, 8, 5, 7, 8, 2]
QuickFindUF:
    are 3 and 6 connected?: False
    are 3 and 6 connected?: True
Total time: 2.7e-05 
[1, 8, 1, 5, 4, 8, 5, 5, 8, 2]
QuickUnionUF:
    are 3 and 6 connected?: True
    are 3 and 6 connected?: True
Total time: 2.6e-05 
[1, 8, 1, 5, 4, 8, 5, 5, 8, 2]
QuickUnionWeighted:
    are 3 and 6 connected?: True
    are 3 and 6 connected?: True
Total time: 2.8e-05 
[1, 8, 1, 5, 4, 8, 5, 5, 8, 2]
QuickUnionPathCompression:
    are 3 and 6 connected?: True
    are 3 and 6 connected?: True
Total time: 2.7e-05
For some reason, the arrays are getting changed before the comparison in all but the QuickFindUF instance. Any ideas why?
This is the repo I've created: https://github.com/herrmendez/python-algorithms
 
     
    