• 算法思维(长期更)


    哈希思想(散列表)

    • 根据关键字的值来计算出关键字在表中的地址

    • 解决哈希冲突

      • 直接定址 取关键字或关键字的某个线性函数为Hash地址,即H(key)=keyH(key)=a x key + b

      • 数字分析 分析原则是尽量取冲突少的字段,适用于关键字位数比较多,且关键字已知

      • 平方取中 取关键字平方后中间几位数的值作为Hash值,因为中间几位数和数的每一位数都相关,随机性更大

      • 除留余数 取关键字被某个不大于Hash表表长m的数p除后所得的余数即为hash地址,H(key)=key mod p (p<=m=lenth) ,一般p 选不于表长的最大素数

      • 链地址法 根据以上方法如果算出重复的Hash值,则将该Hash值对应的数以链表形式追加到末尾,若Hash值相等且key也相等则进行替换

    抽屉思想

    • 把多于n+1个的物体放到n个抽屉里,则至少有一个抽屉里的东西不少于两件(定理1)

    • 应用

      • 去重。将包含一个重复数的连续的6个数字分别放进5个盒子里,找出重复数。

    布隆过滤

    • 概述:布隆过滤器,本身是一个很长的二进制向量,存放的不是0,就是1。当存入数据时经过不同的算法算出数据的地址,并存入则位置向量值为1,查询一个数据是否存在时,就使用相同的算法算出该数据在二进制向量中对应地址处值是否为1,为1 则数据极高可能存在,否则不存在;因为hash冲突无法避免,所以海量数据时同一向量位置值可能已经为1了。

    • 意义:海量请求请求缓存中不存在的id,就会去向数据库发起请求,利用布隆过滤,可以在访问数据库之前判断该id是否不存在数据库中,若不存在则不会访问数据库;

    • 弊端:只能判断数据一定不存在数据库,而无法判断数据一定存在数据库,并且随着访问量巨增,误判率也会增加

    非常思想

    1. (最小正整数)若数组的长度大于等于数组中的最小值,则最小值一定包含在数组长度内部,for循环0~lenth 即可得最小值;若数组的长度小于数组中的最大值,则最下正整数为1。缺失的第一个正数
  • 相关阅读:
    eclipse远程调试Tomcat方法(转)
    Django表单字段汇总
    Django表单API详解
    django使用表单
    django自定义模板标签和过滤器
    django人类可读性
    django特殊的标签和过滤器
    Django内置模板标签
    Django模板语言详解
    django 动态生成PDF文件
  • 原文地址:https://www.cnblogs.com/luckyCoder/p/12733299.html
Copyright © 2020-2023  润新知