
算法
cs_zwf
这个作者很懒,什么都没留下…
展开
-
回溯算法----着色问题
给定无向连通图G和m种颜色,用这些颜色给图的顶点着色,每个顶点一种颜色。如果要求G的每条边的两个顶点着不同颜色。给出所有可能的着色方案回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。图的结构类型: 构建一个图的结构体 ...原创 2020-06-01 10:23:11 · 1260 阅读 · 0 评论 -
贪婪算法---哈夫曼算法
哈夫曼算法---求哈夫曼树,使二叉树的带权路径总长最小的树, 每个树叶都有一个权值,路径指树叶所在的层次(树叶到根节点所要经过的节点数,树高), 使每一个树叶的权值乘路径长,使总和最短的二叉树的排列方式哈夫曼算法 使 点按权值升序排列,每次使最小的两个点合并成一棵二叉树,二叉树的左右节点为该两个点,二叉树的根节点数值为左右子树相加,将该数值插入到原来的序列的中,重复此过程,直到最后一颗二叉树代码地址:https://github.com/zhangweifeng66/algorithm...原创 2020-05-18 16:06:26 · 274 阅读 · 0 评论 -
动态规划-----最长公共子序列LCS问题
最长子序列LCS问题:按下标严格递增序列, Z的序列中元素都可以在X序列中按照序列顺序找到假设两个序列X,Y, Z是序列X的子序列,Z是序列Y的子序列,则称Z是X,Y的公告子序列两个序列X,Y按照下标增长,当序列中的元素相同时,该元素一定在Z中,且X,Y都增长1,如果不相同,则其中一序列增长,另一序列不动.但是怎么确认是哪个序列增长呢? 一序列不动,另一序列从当前位置遍历到...原创 2020-04-26 21:09:24 · 173 阅读 · 0 评论 -
动态算法----矩阵链算法
递归算法是将大问题拆分成小问题动态算法是迭代算法,将小问题推成大问题矩阵链算法,求出两个矩阵相乘的运算次数,在此基础上的三个矩阵相乘(用之前的两个矩阵,再头尾两个矩阵相乘后,再相加),等等,在此基础上,最后所有矩阵相乘求出最少次数.步长(几个矩阵相乘),所有矩阵按照步长划分成几(矩阵数-步长)组(每组求出最少次数),每组(步长)内划分,例如按四的步长,划分为2 * 2 还是1 * 3,...原创 2020-04-20 09:58:20 · 246 阅读 · 0 评论 -
投资问题 ---- 动态规划问题
动态规划 是一种 多阶段决策过程最优的通用方法优化原则: 一个最优决策序列的任何子序列本身一定是相对于子序列的初始和结束状态的最优决策序列我的理解是:假设S3A3B4C4T4(最优化的未知)是最优化的,即是 所有的S中某点 到 所有的T中某点 最短的选择路径 按照优化原则, 即是S3A3B4CT4中任何子序列 是 相对于开始和结束两点中最短的, 比如 A3B4C4是相对于...原创 2020-04-13 12:13:50 · 1071 阅读 · 0 评论 -
选第k小元素 按5个划分的特定分治策略
在乱序数组中寻找他第k位小的元素1.将数组排序后选取第k位小元素 O(nlogn)2.特定分治策略图片来自https://www.jianshu.com/p/2759d3c21bd9将数组每五个划分一组,最后一组如果不够就只有那些数,每组都是有序的 O(n) 为什么是五个五个分,这是算法设计者实验得出最佳的方法用每组的中位数来进行组之间的排序,也就是在所有的中间值中...原创 2020-04-06 19:54:22 · 618 阅读 · 0 评论 -
最近点对问题 ---分治算法
n个点在公共空间中,求出所有点对的欧几里得距离最小的点对。1.暴力破解,时间复杂度(n^2),太大了,不方便2.分治算法, 最近点对问题和在一个数组中求最大序列和问题的思路是相似的用结构体数组保存在笛卡尔坐标系上的点,按照x升序排列,找到x坐标数组中 中间的那个 作为分界线 ,平衡子最小点对有三种情况,要么分别在分界线两边,要么经过分界线(可以一段在分界线上)求左右边的最近点对...原创 2020-03-30 18:46:26 · 823 阅读 · 0 评论 -
二分归并排序
使用的是"分治"策略,将大问题分成小问题解决将数组分成两个数进行比较,排序,再此基础上进行两个有序数组的排序,依次类推,直到原来整个大数组.复杂度 O(nlogn)https://github.com/zhangweifeng66/algorithms...原创 2020-03-23 19:12:02 · 144 阅读 · 0 评论 -
关于简单检索算法
在一个排好序的数组T[1..n]中查找x,如果x在T中,输出x在T的下标j;如果x不在T中,输出"不在"第一种 穷举法 对数组每一个进行比较,如果等于,就返回下标,如果都没相同,则返回不在 复杂度 O(n)第二种 二分法, 因为是排好序,每次跟中间的比较,如果大于,就在上一半,小于就在下一半,等于返回下标,函数调用每次输入地址,数组的开头和结尾,还有要找的数 复杂度 O(...原创 2020-03-16 19:25:53 · 248 阅读 · 0 评论 -
关于Floyd算法 和 Dijkstra算法
Floyd和Dijkstra算法是一种在具有正或负边缘权重(但没有负周期)的加权图中找到最短路径的算法,不同点在于Floyd算法求加权图中所有顶点之间的最短路径; Dijkstra算法在求一点到其他所有顶点的最短路径Dijkstra算法: 依次求距离源点的最短路径,再求还不确定的最小权值时(再求还未确定的顶点),就是从最后确定的最新权值的基础上(从那个顶点出发)遍历与他相连的边,在所有...原创 2020-03-09 21:04:29 · 863 阅读 · 0 评论 -
关于Prim算法和Kruskal算法
Prim算法和Kruskal算法都是描述连通图的最小生成树(最小权重生成树),也就是极小连通子图.( 就是在连接原图所有节点的情况下,使边的权值相加最小的通路)Prim算法 Prim算法的思路是随机从图上一个节点出发,选择与该节点连接的边中权值最小的边,再从该节点和与之相连的另一节点出发选择权值最小的边,但是新选择的节点和边不能与原有节点,边构成圈,以此类推,直至连接...转载 2020-03-02 19:24:18 · 621 阅读 · 0 评论