Commit 72e36f40 authored by Ing. Petr Pauš, Ph.D.'s avatar Ing. Petr Pauš, Ph.D.
Browse files

Cviceni 5

parent 8ab6fb97
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
def find_rek(x, arr, start:int, end:int) -> any:
    if start>end:
        return None
    
    mid = (start + end) // 2

    if x<arr[mid]:
        return find_rek(x, arr, start, mid-1)
    elif x>arr[mid]:
        return find_rek(x, arr, mid+1, end)
    else:
        return mid

def find(x, arr:list) -> int:
    return find_rek(x, arr, 0, len(arr)-1)



arr = [1,2,3,4,10,20,30,50,100,1000]

print(find(50, arr))
print(find(51, arr))
 No newline at end of file
+11 −0
Original line number Diff line number Diff line
def find_rek(x, arr, start, end) -> int:
    


def find(x, arr:list) -> int:
    pass


arr = [1,2,3,4,10,20,30,40,100,1000,10000]

print(find(100))

2024/05/hash-cv-14h.py

0 → 100644
+83 −0
Original line number Diff line number Diff line
MAX_CAPACITY = 10

class Node:
    def __init__(self, key:str, data:any) -> None:
        self.key = key
        self.data = data
    
    def __str__(self) -> str:
        return f"({self.key}:{self.data})"


class HashTable:
    def __init__(self) -> None:
        self.size = 0
        self.capacity = MAX_CAPACITY
        self.table = [None] * MAX_CAPACITY
        for i in range(len(self.table)):
            self.table[i] = []

    def hash(self, key:str) -> int:
        # return len(key) % self.capacity
        hashsum = 0

        for i, c in enumerate(key):
            hashsum += (i + len(key)) ** ord(c)
            hashsum = hashsum % self.capacity
        
        return hashsum
    
    def insert(self, key:str, data:any) -> bool:
        bucket_index = self.hash(key)

        for x in self.table[bucket_index]:
            if x.key == key:
                return False
        self.table[bucket_index].append(Node(key,data))
        self.size += 1
        return True
    
    def print(self) -> None:
        for i in range(len(self.table)):
            print(f"{i} -> [", end="")
            for x in self.table[i]:
                print(x, end=" ")
            print("]")
    
    def find(self, key:str) -> any:
        bucket_index = self.hash(key)
        for x in self.table[bucket_index]:
            if x.key == key:
                return x.data
        return None
            

    def remove(self, key:str) -> bool:
        bucket_index = self.hash(key)
        for i in range(len(self.table[bucket_index])):
            if key == self.table[bucket_index][i].key:
                self.table[bucket_index].pop(i)
                return True
        return False

hash = HashTable()

hash.insert("abc", 50)
hash.insert("acd", 5)
hash.insert("a", 15)
hash.insert("b", -50)
hash.insert("abcd", "ABC")
hash.insert("zalg", 1+2j)
hash.insert("ctvrtek", 1.35)
hash.insert("123456789123456789", 'cislo')

print(hash.find('zalg'))
print(hash.find('xyz'))

hash.print()

hash.remove('abcd')
hash.remove('ctvrtek')

hash.print()

2024/05/hash-cv-16h.py

0 → 100644
+81 −0
Original line number Diff line number Diff line
class Node:
    def __init__(self, key:str, data:any) -> None:
       self.key = key
       self.data = data 

    def __str__(self) -> str:
        return f"({self.key}: {self.data})"  
    
class HashTable:
    def __init__(self, capacity:int) -> None:
        self.size = 0
        self.capacity = capacity
        self.table = [None] * capacity
        for i in range(capacity):
            self.table[i] = []

    def hash(self, key:str) -> int:
        hashsum = 0

        for c in key:
            hashsum += ord(c)
        
        return hashsum % self.capacity
    
    def insert(self, key:str, data) -> bool:
        bucket_index = self.hash(key)
        for node in self.table[bucket_index]:
            if node.key == key:
                return False
        self.table[bucket_index].append(Node(key, data))
        self.size += 1
        return True
    
    def print(self):
        for i in range(self.capacity):
            print(i, ': ', end="")
            for x in self.table[i]:
                print(x, end=" ")
            print()

    def find(self, key:str) -> any:
        bucket_index = self.hash(key)
        for node in self.table[bucket_index]:
            if node.key == key:
                return node.data
        return None

    def remove(self, key:str)-> bool:
        bucket_index = self.hash(key)
        for i in range(len(self.table[bucket_index])):
            if key == self.table[bucket_index][i].key:
                self.table[bucket_index].pop(i)
                return True
        return False


hash = HashTable(10)

hash.insert("abc", 40)
hash.insert("x", "data")
hash.insert("y", "Data 2")
hash.insert("ABC", 1+2j)
hash.insert("111", 50.5)
hash.insert("2", [1,2,3,4])
hash.insert("klic1", {"x":10})
hash.insert("utery", 0)
hash.print()

print(hash.find("klic1"))
print(hash.find("Y"))

hash.remove("111")
hash.remove("utery")
hash.remove("klic1")

hash.print()




        
 No newline at end of file