
算法
文章平均质量分 54
我是十三呀
追逐计算浪潮的在校大学生
展开
-
算法之多源路径最短
动态规划算法 求带权有向图的最短连接路径,即d【i,j】i 结点到 j 结点路径最短,k是这条路径上的结点, 那么必然有d【i,j】=d【i,k】+d【k,j】。如此即表明该问题具备最优子结构, 什么意思呢,就是d【i,j】=d【i,k】+d【k,j】这个公式中的 i ,j 可以是a【10】十个结点中最大和最小两个节点,也可以是该图的十个结点中的中间任意两项 既然存在最优子结构,可以考虑动态规划算法 获得d【i,j】的最短路径呢,只有两种情况 其一:i 可达 j 那么距离就是 i 到 j 的距离 其二:i原创 2020-12-26 19:58:33 · 255 阅读 · 0 评论 -
算法之最长公共子序列
最长公共子序列之动态规划 给定两个字符串求两个字符串的最长公共子序列。这让我们最先想到的一定是用穷举法将两个字符串的子序列分别列出来,然后比对,最长的既是答案。 没错,这样也可以做出来,但是一个长度为m的字符串子序列有2^m个,无疑穷举法太过于缓慢。 我们假设参照序列有m个,比对序列有n个,恰好有两种情况 一、 恰好两个序列最后一个字符相等,那这两个字符串的最长公共子序列就等于m-1,n-1这两个字符串的最长公共子序列+1。即L【m,n】=L【m-1,n-1】+1; 二、 恰好两个序列最后一个字符不相等,那原创 2020-12-25 19:42:47 · 326 阅读 · 0 评论 -
多段图动态规划
多段图动态规划问题 多段图问题是典型的动态规划问题,动态规划问题最重要的一点是找到他的最优子结构。 由 i 个结点构成的多段图寻找0到 i 结点的最短路径,必然有0到 i -1结点的最短路径 所以我们不妨设置一个数组cost [ n ]来分别表示0到【0-n】各个结点的最短路径 要解决这个问题,每两个结点之间是否连接,连接的长度是多少必不可缺, 所以我们可以再设置一个数组a [ n ] [ n ]来记录任意两个结点之间的长度 当然,不是任意两个结点都会连接,所以之前的初始化我们可以将所有的两点之间的长度原创 2020-12-23 22:28:23 · 787 阅读 · 1 评论 -
算法之最优二叉树搜索
动态算法之最优二叉搜索树## 标题 最优二叉搜索树的解题核心是动态规划算法,每一个左子树右子树都是原树的一个简化,他们都遵循中跟遍历的节点值由低到高,正好具备最优子结构。 将节点从小到大排序:p1,p2,p3,p4,p5那么一定有某个搜索值在两个相邻节点之间,不在树内则搜索失败,假设其搜索失败的概率为Q则可将所有数进行一个排列:Q0,p1,Q1,p2,Q2,p3,Q3,p4,Q4,p5,Q5(此处大写Q是为了容易看) 我们在此引入平均搜索代价的计算公式 cost(T) = Σ(1–n) p(i) * le原创 2020-12-17 20:54:00 · 2526 阅读 · 0 评论 -
算法之快速排序
*算法之快速排序 快速排序是分治算法的一个典型例题,其主要思想是将问题规模缩小。 第一个问题是从哪一分为二:这个问题在快速排序中是假设数组首项为中间值,由两个指针依次向中间移动,左边的指针检测大于首项的,而右边指针检测小于首项的,然后进行交换,代码如下 而后将首项调至中间,以此为中点分为两个数组再次进行一分为二。直到最后数组化为仅一个元素的数组,则无需调动。 代码主要分为两部分,一则是分,二则是排;代码如下: 分: 排: 注意:如果用Java书写此算法会有一种情况报错,就是在输入数组为降序是排序程序里原创 2020-12-01 13:57:23 · 1165 阅读 · 1 评论