1

次のようなタプルで構成されるデータベースがあります

「The Abyss,1989,LaserDisc,Science Fiction,James Cameron,James Cameron,USA,20th Century Fox,$0.00」

映画のタイトルと年を連結して、各バケットの一意のキーを作成したいと考えています。しかし、方法がわからない...これには拡張可能なハッシュを使用すると有益だと思います。

DVDやVHSで検索できるようにしたいのですが、年代別に検索・検索できるようにしたいです。私は、10 年ごとの数年と映画の種類 (DVD、VHS) で構成されます。

今のところ、単純な追加、削除、および取得機能があります

class HTable(object):

    def __init__(self, table = [], maximum = 100):
        #table = dict, maximum = maximum amount of elements.
        assert type(table) == dict
        self.table = table
        self.max = maximum

    def lookup(self, data):
        #Lookup a value in our table.
        if type(data) == int or type(data) == long:
            try:
                if self.table[data % self.max] != None:
                    return (data % self.max, self.table[data % self.max])
                else:
                    return None
            except:
                return None
        else:
            try:
                obj1 = self.string2int(data) % self.max
                obj2 = self.table[self.string2int(data) % self.max]
                if obj2 != None:
                    return (obj1, obj2)
                else:
                    return None
            except:
                return None

    def append(self, data):
        #data = int, string, object, etc. No duplicates allowed.
        assert len(self.table) < self.max
        if type(data) == int or type(data) == long:
            original = data
            if data >= self.max:
                raise IOError, "Value to large to append into hash table. Max limit reached."
        else:
            original = data
            data = self.string2int(data)
            index = data % self.max
            if int(index) >= self.max:
                 raise IOError, "Data: %s, exceeded your maximum limit of %s, with the size of %s." %(str(original), str(self.max), str(index))
        try:
            if type(original) == int or type(original) == long:
                self.table[data % self.max] = data
            else:
                self.table[data % self.max] = original
            return self.table
        except:
            if len(self.table) < data % self.max:
                while len(self.table) < data % self.max:
                    self.table.append(None)
                if type(original) == int:
                    self.table.insert(data % self.max, data)
                else:
                    self.table.insert(data % self.max, str(original))
            return self.table

    def string2int(self, STRING):
        #Convert a string into a 'hash' integer.
        return sum([ord(j) for j in STRING])

    def isEmpty(self):
        #Return True if empty, false otherwise.
        if len(self.table) == 0:
            return True
        else:
            return False

    def isFull(self):
        #Returns TRUE if full, false otherwise.
        if len(self.table) == self.max:
            return True
        else:
            return False

    def remove(self, key):
        #Remove the data located at the given index/key. Key can be a index key(integer), or the data itself. For example: self.remove(key = 'value') or self.remove(key = 10).
        try:
            self.table.pop(int(key))
            return 1
        except:
            try:
                self.table.remove(key)
                return 1
            except:
                return False

    def get(self, key):
        #Get the data in our HASH Table, using the given index(key).
        try:
            return self.table[int(key)]
        except:
            return None

    def output(self):
        #Return our current HASH Table.
        return self.table
4

0 に答える 0