zoukankan      html  css  js  c++  java
  • 哈希算法简单回顾 + 设计RandomPool结构

    哈希回顾

    比较重要的性质:

    不可逆:当你知道x的HASH值,无法求出x;

    无冲突:当你知道x,无法求出一个y, 使x与y的HASH值相同

     1 # 哈希特征:
     2 # 1.输入无限
     3 # 2.输出有穷
     4 # 3.输入相同==>输出必相同
     5 # 4.可能存在不同的输入结果输出一样  ==>  哈希碰撞
     6 # 5.输入样本够大,在输出样本上几乎均匀分布 ==> 散列
     7 # md 5  桶结构  hashcode模n ===>  在0--n-1上均匀分布
     8 
     9 # 设计RandomPool结构
    10 # 【题目】 设计一种结构,在该结构中有如下三个功能:
    11 # insert(key):将某个key加入到该结构,做到不重复加入。
    12 # delete(key):将原本在结构中的某个key移除。
    13 # getRandom(): 等概率随机返回结构中的任何一个key。
    14 # 【要求】 Insert、delete和getRandom方法的时间复杂度都是 O(1)
    15 import random
    16 
    17 
    18 class RandomPool:
    19     def __init__(self):
    20         self.dict1 = dict()     # 字典1:  key:存储key       value:存储当前加入的顺序,第n个
    21         self.dict2 = dict()     # 字典2:  key:存储count     value:存储加入的key
    22         self.size = 0
    23 
    24     def insert(self, key):
    25         if key not in self.dict1:
    26             self.dict1[key] = self.size
    27             self.dict2[self.size] = key
    28             self.size += 1
    29 
    30     def getRandom(self):
    31         if self.size == 0:
    32             return None
    33         index = int(random.randrange(self.size))
    34         return self.dict2[index]
    35 
    36     def delete(self, key):                  # 当删除指定key时,字典2中删除key对应的count后,
    37         if key in self.dict1:               # 把最大的count对应的value补到count上,方便getRandom()函数
    38             delindex = self.dict1[key]
    39             lastkey = self.dict2[self.size]
    40             self.dict1.pop(key)
    41             self.dict1[lastkey] = delindex
    42             self.dict2[delindex] = lastkey
    43             self.dict2.pop(self.size)
    44             self.size -= 1
  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/icekx/p/9136552.html
Copyright © 2011-2022 走看看