算法与数据结构
一颗程序媛0915想上岸
越努力,越幸运……
展开
-
KMP算法详解
KMP算法的核心,是一个被称为部分匹配表(Partial Match Table)的数组。对于字符串“abababca”,它的PMT如下表所示:如果待匹配的模式字符串有8个字符,那么PMT就会有8个值也就是表中的value。字符串的前缀和后缀。如果字符串A和B,存在A=BS,其中S是任意的非空字符串,那就称B为A的前缀。例如,”Harry”的前缀包括{”H”, ”Ha”, ”Har”, ”...原创 2019-03-31 19:33:24 · 268 阅读 · 0 评论 -
巴什博奕
一、游戏规则:只有一堆n个物品,两个人轮流从这堆物品中取物, 规定每次至少取一个,最多取m个。最后取光者得胜。二、详解:显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走k(≤m)个,那么先取者...原创 2019-08-23 16:01:52 · 1742 阅读 · 0 评论 -
红黑树(Red Black Tree)
一、概述:R-B Tree,全称是Red-Black Tree,又称为“红黑树”,它一种特殊的二叉查找树。红黑树的每个节点上都有存储位表示节点的颜色,可以是红(Red)或黑(Black)。二、特性:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶子节点(NIL)是黑色。[注意:这里叶子节点,是指为空(NIL或NULL)的叶子节点!](4)如果一个节...原创 2019-08-21 18:53:09 · 390 阅读 · 0 评论 -
二叉查找树、平衡二叉树(AVLTree)和平衡多路查找树(B-Tree),B+树
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 ...转载 2019-08-21 12:14:32 · 921 阅读 · 0 评论 -
堆排序
堆的定义:堆实际上是一棵完全二叉树。堆满足两个性质:1、堆的每一个父节点都大于(或小于)其子节点;2、堆的每个左子树和右子树也是一个堆。堆的分类:1、最大堆(大顶堆):堆的每个父节点都大于其孩子节点;2、最小堆(小顶堆):堆的每个父节点都小于其孩子节点;堆的存储:一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2。它的左右子结...原创 2019-08-25 16:01:54 · 880 阅读 · 0 评论 -
0-1 背包问题(动态规划)
一、问题描述:给定 n 种物品和一个容量为 C 的背包,物品 i 的重量是 wi,其价值为 vi 。问:应该如何选择装入背包的物品,使得装入背包中的物品的总价值最大?每个物品,我们只有选择拿取或者不拿两种选择,不能选择装入某物品的一部分,也不能装入同一物品多次。二、解决方法j:表示当前背包的容量V(i,j):当前背包容量 j,前 i 个物品最佳组合对应的价值 ...原创 2019-08-25 12:22:08 · 912 阅读 · 5 评论 -
n&(n-1)的妙用
原理:n与n-1的区别在于,对于n,从右向左数的第一个"1"开始一直到右,和n-1,完全相反。作用:将n的二进制表示中的最低位为1的改为0。n = 10100(二进制),则(n-1) = 10011 ==》n&(n-1) = 10000,可以看到原本最低位为1的那位变为0。妙用:1,求一个int类型数是否为2的幂当n=4时,二进制为:0100 ,n-1=3,二进制为:...原创 2019-08-25 09:52:35 · 589 阅读 · 0 评论 -
负载均衡与一致性哈希
一、分布式缓存1.应用场景:假设有三台缓存服务器s0,s1,s2,同时有三万张图片需要缓存,最好图片可以均匀的缓存到服务器上,这样可以分担缓存的压力,对缓存下的键进行hash计算,哈希后的值是个整数,再用缓存服务器的数量对这个值进行取模计算,余数决定数据应该缓存到哪台服务器上。hash(名称)%机器数=余数2.缺陷将缓存服务器增加至3-4台,由于服务器数量发生变化,导致不能正常访问缓存数...原创 2019-07-28 16:24:41 · 1928 阅读 · 0 评论 -
哈希表详解---构建、hash冲突、查找
一、基本概念:根据设定的哈希函数以及处理冲突的方法将查找表中各数据元素存储在一段有限的连续空间中,即得哈希表,也称散列表。二、构造哈希函数的基本方法1) 直接定址法取关键字或关键字的某个线性函数值为散列地址。即 f(key) = key 或 f(key) = a*key + b,其中a和b为常数。eg:以人口统计表中的年龄直接作为存储地址2) 除留余数法取关键字被某个不大于散列表长...原创 2019-07-28 11:38:53 · 1111 阅读 · 0 评论 -
递归和迭代的区别
递归和迭代都是循环中的一种:递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环。而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。递归循环中,遇到满足终止条件的情况时逐层返回来结束。迭代则使用计数器结束循环。使用递归要注意的有两点:1)递归就是在过程或函数里面调用自身;2)在使用递归时,必须有一个明确的递归...原创 2019-07-19 16:27:14 · 4759 阅读 · 0 评论 -
活动安排问题与贪心算法
贪心算法:在求最优解问题的过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解,这种求解方法就是贪心算法。从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解。如果一个问题同时可以用几种问题解决,贪心算法应该是最好的选择之一...原创 2019-10-06 22:16:13 · 2728 阅读 · 0 评论