算法
奔跑的xdr
奔跑的xdr
展开
-
【大白话版】求最大和子数组的动态规划算法
题目:求连续子数组的最大和 要求:时间复杂度O(n) 算法思路: 基于动态规划的思想: 1、算法中维护两个最大和:全局最大和max、局部最大和sum 2、全局最大和的维护:当局部>全局时,更新全局,将其赋值为局部值 3、局部最大和的维护:若当前局部<0,则新的最大和将不包含前面累积的最大和(因为前面的累积 对于 得到最大和 起的是负作用),那么新的最大和将是下一个元素本身。若当前局部>=原创 2017-12-14 14:20:24 · 498 阅读 · 0 评论 -
分配问题与匈牙利法
分配问题: 已知成本矩阵,求最优分配方案。 成本矩阵:行列分别为worker和task,元素值为对应worker完成对应task的开销。 现只研究task数=worker数,且每个任务能且只能分配给一个人的情况。也就是说有效的方案的成本总和是从成本矩阵中取出n个既不同行又不同列的元素求和得到的。 解决算法: 1、蛮力:穷举法。对于n*n矩阵,要计算n!个成本值,时间复杂度O(n!) 2、原创 2017-12-23 21:45:26 · 1724 阅读 · 1 评论 -
哈密顿回路及解法
哈密顿回路: 1、指一个对图的每个顶点都只穿越一次的回路。也可以 定义为n+1个相邻顶点v0, v1, … ,vn, v0的一个序列,其中序列的第一个顶点和最后一个顶点是相同的,而其他n-1个顶点是互不相同的。 2、当这个图是加权图时,求该图的最短哈密顿回路,就是传说中的旅行商问题(TSP)。使用蛮力法求解: 1、首先规定作为起止点的顶点。由于回路是无向的,因此起止点可直接任选; 2、规定中原创 2017-12-24 15:11:59 · 23141 阅读 · 1 评论 -
减治法解决假币问题
识别假币问题:在n枚外观相同的假币中,有一枚是假币。在一架天平上,我们可以比较任意两组假币。也就是说,通过观察天平是向右倾、向左倾还是停在当中,我们可以判断出两组硬币重量是否相同,或者哪一组比另一组更重,但是我们不知道重多少。问题是:设计一种有效的算法来检测出这枚假币。简化版本:已知假币相对真币较轻或者较重; 普通版本:不知道假币轻还是重 除了每次把硬币分为2份的办法,还可以用更加高效的把...原创 2018-03-16 21:27:04 · 3706 阅读 · 2 评论 -
求二叉树中节点的最大距离
完成求二叉树中节点间最大距离的代码。两个节点间的距离为包括的节点的个数,路径 上的每个节点只能被包含一次。思路:相距最远的两节点在树中的分布有两种情况: 1、两节点分别在根结点的左右子树中,其最远距离为两节点分别到达根结点的路径长度之和; 2、两节点同时在根结点的同一个子树上,设此时两个节点的最小祖先节点为p,此时这个最远距离位于树的以p为根结点的子树中,则其最远距离为两节点分别到达节点p...原创 2018-02-25 13:12:38 · 227 阅读 · 0 评论 -
字符串匹配-KMP算法
字符串匹配-KMP算法KMP算法思想:算法要点KMP算法思想:首先根据子串计算其每一位字符的部分匹配值,得到一个部分匹配表;接着进行比较-位移的比较步骤。其中比较为从左向右依次匹配。如果本轮已匹配字符长度为0,则位移为1,否则,位移的计算公式:本轮比较中已匹配的字符串长度 - 最后一位已匹配字符的部分匹配值。部分匹配值的计算说明:首先,计算对象是:对这个字符串从第一位开始,计算每个子集的部...原创 2019-05-09 10:52:36 · 182 阅读 · 0 评论