维特比算法(Viterbi Algorithm)

qingchuan 算法的力量 2,565 次浏览 , , ,
本分摘录翻译自wikipedia Viterbi algorithm。 维特比算法(Viterbi algorithm)是一种动态规划算法,它用于寻找最可能产生观测到的事件的序列,这个序列是隐含状态序列,也叫维特比路径(Viterbi path)。最典型的应用场景是马尔科夫信...

DP求最大回文子串长度

qingchuan 算法的力量 1,278 次浏览 ,
问题:给定字符串,求其最长回文子串的长度。回文串是形如"aba", "abba"的对称字符串。例如:字符串“xabcbam”的最长回文字符串长度为5。 这个问题可以用动态规划(DP)来求解,其初始状态和转移方程如下: 实现的代码如下: ...

二叉搜索树的平衡调整策略

qingchuan 算法的力量 1,936 次浏览
一般的二叉搜索树(BST)在插入和删除数据的时候,直接在一定的位置添加和删除节点,没有应用使树 平衡的调整策略,树的高度不能得到有效控制,在极端的数据下可能退化为单链表从而降低二叉搜索树的性能。为了 使二叉搜索树更具有通用...

KMP算法的原理及实现【附C语言源码】(原创)

qingchuan 算法的力量 1,578 次浏览 ,
KMP算法是一种线性时间复杂的字符串匹配算法,它是对BF算法(Brute-Force,最基本的字符串匹配算法的)改进。 对于给的的原始串$$S$$和模式串$$P$$,需要从字符串$$S$$中找到字符串$$P$$出现的位置的索引。 BF算法的时间复杂度$$O(s...

单链表的快速排序(原创)

qingchuan 算法的力量 1,471 次浏览 ,
单链表的快速排序和数组的快速排序在基本细想上是一致的,以从小到大来排序单链表为例, 都是选择一个支点,然后把小于支点的元素放到左边,把大于支点的元素放到右边,然后分治递归。 但是,由于单链表不能像数组那样随机存取...

线性时间复杂度求数组中第K大的数【原创】

qingchuan 算法的力量 1,347 次浏览 ,
求数组中第K大的数可以基于快排序思想,步骤如下: 1.随机选择一个支点 2.将比支点大的数,放到数组左边;将比支点小的数放到数组右边;将支点放到中间(属于左部分) 3.设左部分的长度为L, 当K < L时,递归地在左部分找...

top-k算法的二分实现(修正版)(C++实现)

qingchuan 算法的力量 1,544 次浏览 ,
摘要:本文简要介绍了top-k(求一个序列中前K个最大或最小的元素)算法的二分实现方法,并给出了C++源 代码 关键字:top-k,二分,快排序 网上介绍top-k算法的博文貌似不多,有一个搜索引擎中排名靠前的top-k算法介绍中给出了...

大整数乘法(高精度乘法)的实现源码(原创)

qingchuan 算法的力量 1,525 次浏览
问题描述:给定两个正整数A,B(A和B可能超出计算机中国INT32,INT64的范围,高达几百甚至上千位), 求A和B相乘的积。 解决方案: 用计算机模拟手算的乘法,假设A和B都用字符串表示, 时间复杂度为:O(strlen(A) * strlen(B)...

拓扑排序算法(邻接矩阵版)(C++实现)

qingchuan 算法的力量 1,536 次浏览 ,
摘要:本文简要介绍了拓扑排序算法的原理,并给出了基于邻接矩阵实现的拓扑排序c++源码 关键字:拓扑排序,topological sort,AOV网络 最近在论坛上看到一个百度的笔试题,大概意思是给定N个有依赖关系但是没有循环依赖的源码文...
Go