Пример #1
0
def Q1(Random, capacity):
    """
    Parameter:
        Random takes in True/False
            if True, insert integers randomly. 
        Capacity takes in initial array capacity. 
    """
    hashSet = HashSet([], capacity)
    listOf400 = list(range(1, 401))
    numberLeft = 400
    elapsedTimeTotal = 0
    while numberLeft > 0:
        index = (random.randint(0, numberLeft - 1))
        if Random:
            addNumber = listOf400.pop(index)
        else:
            addNumber = listOf400.pop(0)
        startTime = time.time()
        hashSet.add(addNumber)
        endTime = time.time()
        elapsedTimeTotal += round(endTime - startTime, 10)
        numberLeft -= 1
    print("Initial array length:", capacity, "| Final length:",
          len(hashSet._array))
    print("Time taken for all add(): ", elapsedTimeTotal)
Пример #2
0
 def test_add(self):
     hs = HashSet([1, 3, 5, 7])  # size 4
     assert hs.contains(23) == False
     hs.add(23)  #size 5
     assert hs.contains(23) == True
     hs.add(2)  #size 6
     assert hs.size == 6
Пример #3
0
 def test_contains(self):
     hs = HashSet()
     hs.add('I')
     hs.add('V')
     hs.add('X')
     assert hs.contains('I') is True
     assert hs.contains('V') is True
     assert hs.contains('X') is True
     assert hs.contains('A') is False
Пример #4
0
 def test_add_and_contains(self):
     hs = HashSet()
     hs.add('I')
     hs.add('V')
     hs.add('X')
     assert hs.contains('I') is True
     assert hs.contains('V') is True
     assert hs.contains('X') is True
     assert hs.size == 3
Пример #5
0
 def test_size(self):
     hs = HashSet([5, 2, 6, 1, 3])
     assert hs.size() == 5
     hs.add(42)
     assert hs.size() == 6
     hs.add(21)
     assert hs.size() == 7
     hs.remove(42)
     assert hs.size() == 6
Пример #6
0
 def test_add(self):
     elements = ["hola", "adios", "test", "test"]
     hs = HashSet(elements)
     hs.add("annie")
     assert hs.size == 4
     assert hs.contains("annie") == True
     hs.add("hola")
     assert hs.size == 4
     assert hs.contains("hola") == True
Пример #7
0
class HashMap:
    class __KVPair:
        def __init__(self, key, value):
            self.key = key
            self.value = value

        def __eq__(self, other):
            if type(self) != type(other):
                return False
            return self.key == other.key

        def get_key(self):
            return self.key

        def get_value(self):
            return self.value

        def __hash__(self):
            return hash(self.key)

    def __init__(self):
        self.hash_set = HashSet()

    def __len__(self):
        return len(self.hash_set)

    def __contains__(self, item):
        return HashMap.__KVPair(item, None) in self.hash_set

    def not__contains__(self, item):
        return item not in self.hash_set

    def __setitem__(self, key, value):
        self.hash_set.add(HashMap.__KVPair(key, value))

    def __getitem__(self, key):
        if HashMap.__KVPair(key, None) in self.hash_set:
            return self.hash_set[HashMap.__KVPair(key, None)].get_value()
        raise KeyError(f"Key '{key}' not in HashMap")

    def __iter__(self):
        for i in self.hash_set:
            yield i.get_key()

    def __str__(self):
        s = "{"
        items = []
        for i in self.hash_set:
            items.append(f"{repr(i.get_key())}: {repr(i.get_value())}")
        s += ", ".join(items)
        s += "}"
        return s

    def __repr__(self):
        return str(self)
Пример #8
0
    def test_is_subset(self):
        elements1 = ["1", "4", "6"]
        elements2 = ["1", "4"]

        hs = HashSet(elements1)
        other_hs = HashSet(elements2)

        assert other_hs.is_subset(hs) == True
        assert hs.is_subset(other_hs) == False
        other_hs.add("7")
        assert other_hs.is_subset(hs) == False
Пример #9
0
 def test_remove(self):
     hs = HashSet()
     hs.add('I')
     hs.add('V')
     hs.add('X')
     assert hs.size == 3
     hs.remove('I')
     hs.remove('X')
     assert hs.size == 1
     with self.assertRaises(KeyError):
         hs.remove('X')  # Key no longer exists
     with self.assertRaises(KeyError):
         hs.remove('A')  # Key does not exist
Пример #10
0
def Q2(highestInteger):
    """
    Parameter:
        highestInteger is the max integer to add to the HashSet. 1 - highestInteger. 
    """
    hashSet = HashSet([], 100)
    for number in range(1, highestInteger):
        hashSet.add(number)
    startTime = time.time()
    print("3 in hashSet: ", 3 in hashSet)
    endTime = time.time()
    elapsedTime = round(endTime - startTime, 10)
    print("Time to find 3: ", elapsedTime)
    print("Array length: ", len(hashSet._array))

    return hashSet
Пример #11
0
 def test_remove(self):
     hs = HashSet()
     hs.add('A')
     hs.add('B')
     hs.add('C')
     hs.remove('A')
     assert hs.contains('A') == False
     assert hs.size == 2
     hs.remove('C')
     assert hs.contains('C') == False
     assert hs.size == 1
     hs.remove('B')
     assert hs.contains('B') == False
     assert hs.size == 0
     with self.assertRaises(ValueError):
         hs.remove('D') # Key never existed
         hs.remove('A') # Key no longer exists
Пример #12
0
def main():
    # HashSet methods testing

    hset1 = HashSet([1, 2, 3, 4, 7, 8, 9, 10, 12, 15])
    hset1.printChains()
    print(hset1)
    print("loadFactor() = ", hset1.loadFactor())
    print("cellLoadFactor() = ", hset1.cellLoadFactor())
    print("_" * 70)

    hset1.add(9)  # 9 gets added to chain
    hset1.add(14)  # 14 triggers rehash()
    hset1.add(30)  # 30 gets added to front of chain
    hset1.printChains()
    print(hset1)
    print("loadFactor() = ", hset1.loadFactor())
    print("cellLoadFactor() = ", hset1.cellLoadFactor())
    print("_" * 70)

    # Lab Questions

    print("Question 1")
    print("Adding randomly:")
    Q1(True, 500)  # True is to randomly add integers
    print("\nAdding in order:")
    Q1(False, 500)  #False adds the integers in order

    print("\nAdding randomly:")
    Q1(True, 100)  # True is to randomly add integers
    print("\nAdding in order:")
    Q1(False, 100)  #False adds the integers in order

    print("_" * 70)
    print("Question 2")
    print("Adding 1 to 80 then find 3:")
    Q2(81)
    print("\nAdding 1 to n then find 3:")
    Q2(161)

    print("_" * 70)
    print("Question 3")
    print("Adding 1 to 80, remove 4 to 80, then find 3:")
    Q3(81)
    print("\nAdding 1 to 80, remove 4 to n, then find 3:")
    Q3(161)
 def test_difference(self):
     """Check if the difference operation works as intended."""
     hashset = HashSet()
     other_hashset = HashSet()
     # Spot the difference:
     hashset.add('o')
     hashset.add('o')
     hashset.add('o')
     hashset.add('o')
     other_hashset.add('O')
     other_hashset.add('o')
     other_hashset.add('o')
     other_hashset.add('o')
     other_hashset.add('o')
     difference = hashset.difference(other_hashset)
     assert difference.size == 1
     assert difference.contains('o') is False
     assert difference.contains('O') is True
 def test_union(self):
     """Check if the union operation works as intended."""
     hashset = HashSet()
     hashset.add('FUSION!')
     hashset.add('HA!')
     other_hashset = HashSet()
     other_hashset.add('HA!')
     hashset.add('FUSION!')
     union = hashset.union(other_hashset)
     assert union.size == 2
     assert union.contains('FUSION!') is True
     assert union.contains('HA!') is True
 def test_contains(self):
     """Check to see if the contains method works as intended."""
     hashset = HashSet()
     hashset.add('Hello')
     hashset.add('are')
     hashset.add('you')
     hashset.add('a')
     hashset.add('hashset')
     assert hashset.contains('Hello') is True
     assert hashset.contains('no') is False
     assert hashset.contains('you') is True
     assert hashset.contains('are') is True
 def test_intersection(self):
     """Check if the intersection operation works as intended."""
     hashset = HashSet()
     hashset.add('Hash')
     hashset.add('Set')
     other_hashset = HashSet()
     other_hashset.add('Linked')
     other_hashset.add('Set')
     intersection = hashset.intersection(other_hashset)
     assert intersection.size == 1
     assert intersection.contains('Hash') is False
     assert intersection.contains('Set') is True
     assert intersection.contains('Linked') is False
Пример #17
0
 def test_add(self):
     new_set = HashSet()
     assert new_set.__length__() == 0
     new_set.add('red')
     new_set.add('brown')
     new_set.add('gray')
     assert new_set.__length__() == 3
     assert new_set.contains('red') == True
     assert new_set.contains('brown') == True
     assert new_set.contains('purple') == False
     new_set.add('orange')
     new_set.add('purple')
     assert new_set.__length__() == 5
     assert new_set.contains('purple') == True
Пример #18
0
 def test_add_and_remove(self):
     elements = [1, 2, 3]
     hs = HashSet(elements)
     hs.add(4)
     hs.add(5)
     hs.add(6)
     hs.add(7)
     assert hs.contains(2) is True
     assert hs.contains(4) is True
     assert hs.contains(5) is True
     assert hs.contains(6) is True
     assert hs.contains(7) is True
     assert hs.contains(21) is False
     hs.remove(7)
     assert hs.contains(7) is False
     hs.remove(6)
     assert hs.contains(6) is False
     hs.remove(5)
     assert hs.contains(5) is False
     hs.remove(4)
     assert hs.contains(4) is False
     assert hs.size() == 3
 def test_remove(self):
     """Check to see if items can be removed from the HashSet."""
     hashset = HashSet()
     hashset.add('Please')
     hashset.add('dont')
     hashset.add('remove')
     hashset.add('me')
     assert hashset.size == 4
     hashset.remove('Please')
     hashset.remove('dont')
     assert hashset.size == 2
     self.assertCountEqual(hashset.elements(), ['remove', 'me'])
     hashset.remove('me')
     assert hashset.size == 1
     with self.assertRaises(KeyError):
         hashset.remove('NOOOO')
Пример #20
0
class HashMap:
    class __KVPair:
        def __init__(self, k, v):
            self.k = k
            self.v = v
        
        def __eq__(self, other):
            if type(self) != type(other):
                return False
            return self.k == other.k
        
        def __hash__(self):
            return hash(self.k)
        
    def __init__(self):
        self.hset = HashSet()
    
    def __len__(self):
        return len(self.hset)
    
    def __contains__(self, item):
        return self.__KVPair(item, None) in self.hset
    
    def not__contains__(self, item):
        return item not in self.hset
    
    def __setitem__(self, k, v):
        self.hset.add(self.__KVPair(k, v))
    
    def __getitem__(self, k):
        if self.__KVPair(k, None) in self.hset:
            return self.hset[self.__KVPair(k, None)].v
        raise KeyError('key {} not in hashmap'.format(k))
    
    def __iter__(self):
        for x in self.hset:
            yield x.k
Пример #21
0
 def test_add(self):
     hs = HashSet()
     assert hs.size == 0
     hs.add(2)
     assert hs.size == 1
     hs.add(2)
     assert hs.size == 1
     hs.add(3)
     assert hs.size == 2
Пример #22
0
 def test_size(self):
     hs = HashSet()
     assert hs.size == 0
     hs.add('I')
     assert hs.size == 1
     hs.add('V')
     assert hs.size == 2
     hs.add('X')
     assert hs.size == 3
Пример #23
0
 def test_size(self):
     hs = HashSet()
     assert hs.size == 0
     hs.add('A')
     assert hs.size == 1
     hs.add('B')
     assert hs.size == 2
     hs.add('C')
     assert hs.size == 3
Пример #24
0
 def test_contains(self):
     hs = HashSet()
     hs.add(0)
     hs.add(1)
     hs.add('zero')
     hs.add('one')
     assert hs.contains(0) is True
     assert hs.contains('zero') is True
     assert hs.contains('0') is False
     assert hs.contains(2) is False
 def test_elements(self):
     """Check if a hashset of items in the HashSet can be retrieved."""
     hashset = HashSet()
     assert hashset.elements() == []
     hashset.add('A')
     assert hashset.elements() == ['A']
     hashset.add('tiny')
     self.assertCountEqual(hashset.elements(), ['A', 'tiny'])
     hashset.add('hashset')
     self.assertCountEqual(hashset.elements(), ['A', 'tiny', 'hashset'])
 def test_size(self):
     """Check if the length is updated properly."""
     hashset = HashSet()
     assert hashset.size == 0
     hashset.add('check')
     assert hashset.size == 1
     hashset.add('hashset')
     assert hashset.size == 2
     hashset.add('size')
     assert hashset.size == 3
Пример #27
0
 def test_add_twice_and_contains(self):
     hs = HashSet()
     hs.add('I')
     hs.add('V')
     hs.add('X')
     assert hs.size == 3
     hs.add('V')  # Update value
     hs.add('X')  # Update value
     assert hs.contains('I') is True
     assert hs.contains('V') is True
     assert hs.contains('X') is True
     assert hs.size == 3  # Check size is not overcounting
Пример #28
0
 def test_remove(self):
     hs = HashSet()
     assert hs.size == 0
     hs.add(0)
     hs.add(1)
     hs.add('zero')
     hs.add('one')
     assert hs.size == 4
     hs.remove(0)
     assert hs.size == 3
     hs.remove(1) == 2
     hs.remove('zero') == 1
     with self.assertRaises(KeyError):
         hs.remove('zero')
     with self.assertRaises(KeyError):
         hs.remove('0')
 def test_add_remove(self):
     set = HashSet()
     set.add('A')
     assert len(set) == 1
     assert set.contains('A') is True
     set.add('B')
     assert len(set) == 2
     assert set.contains('B') is True
     set.add('C')
     assert len(set) == 3
     assert set.contains('C') is True
     set.remove('B')
     assert len(set) == 2
     assert set.contains('B') is False
     set.remove('A')
     assert len(set) == 1
     assert set.contains('A') is False
     set.remove('C')
     assert len(set) == 0
     assert set.contains('C') is False
     with self.assertRaises(ValueError):
         set.remove('C')
Пример #30
0
from hashset import HashSet
a = HashSet([1, 2, 3, 4, 5, 4])
print(a)
a.add(7)
a.add(9)
print(a)
a.remove(1)
print(a)