算法
Fhang1996
这个作者很懒,什么都没留下…
展开
-
0-1背包以及完全背包(如何输出包里的物件)
0-1 背包问题问题: 有Num个物品,每个物品的重量为weight[i],每个物品的价值为value[i]。现在有一个背包,它所能容纳的重量为 M ,问:当你面对这么多有价值的物品时,你的背包所能带走的最大价值是多少?解决方法: 采用动态规划的方法解决。 01背包的状态转换方程 f[i,j] = Max{ f[i-1,j-Weight[i]]+Value[i] ( j >= Wi ), f原创 2017-04-02 23:09:04 · 3493 阅读 · 2 评论 -
动态规划2 - 最长公共子序列与最长公共子串
前言:接着上一篇关于动态规划解背包问题。今天继续理解一下最长公共子序列和最长公共子串问题。相信可以对动态规划有非常深入的理解。我也发现动态规划中,我们常常会忽略基步的定义(这里用数学归纳法的归纳基来借指动态规划中的第一行或者第一列)最长公共子序列问题: 给定两个字符串,求出它们之间最长的相同子字符串的长度。(不需要连续)思路: 看不懂的话可以看一个例子:两个字符串 hello llohe原创 2017-04-03 11:52:52 · 624 阅读 · 0 评论 -
二叉树线索化和遍历的算法
前言:关于二叉线索树有什么作用,为什么要建立这里就不介绍。因为时间问题,只是总结一下线索化和遍历的算法。这个算法和前面总结过的非递归法遍历二叉树都算是数据结构里面难度系数比栈,队列,线性表那些大的算法。限定时间内要写出来还是有些难度,最好是能有所总结,才能做到得心应手。先序:先序线索化void PreThreading(BiTreeNode *p, BiTreeNode *pre==NULL) {原创 2017-11-29 21:50:34 · 1521 阅读 · 0 评论 -
树 - 二叉搜索树
二叉排序树 (Binary Sort Tree)定义: 二叉排序树又称“二叉查找树”、“二叉搜索树”。二叉排序树:或者是一棵空树,或者是具有下列性质的二叉树:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉排序树。数据结构: 二叉树一般采用二叉链表实现。 1. 数据结构//define d原创 2017-03-30 10:15:27 · 545 阅读 · 0 评论 -
六大排序算法之 PHP和C++实现 - 算法思路解析
前言:一直以来对于排序算法总有些熟悉又陌生的感觉,这几天看到一篇挺不错的博客讲排序的,http://blog.csdn.net/xiazdong/article/details/8462393 于是学习参考他的思路自己动手用php实现了一下。并且结合每个算法的特性思路写了这篇博客。 源码源码可以直接在github上down,也欢迎修改 https://github.com/fangkehang/p原创 2017-03-08 18:32:05 · 830 阅读 · 1 评论 -
判断链表是否有环并求环的入口和环的长度
方法:求链表是否有环,最直观的方法是从头结点的地址开始,把下一个地址都取出来,然后比对,是否有相同的。但这个方法需要两两比较,算法时间复杂度较高。更好的一个做法是快慢指针(慢指针一次前进一个地址,快指针一次前进两个地址)同时从头结点出发,只有链表有环存在,则它们必定会相遇。快慢指针算法有一个注意点,慢指针进入环之前,快指针可能已经在环中绕了几次圈了。首先比较简单的是求环的长度,当快慢指...原创 2018-03-01 10:15:13 · 591 阅读 · 0 评论 -
牛客网BAT算法精讲总结2-字符串(KMP算法详解)
1. kmp算法kmp算法是字符串匹配经典算法。 字符串匹配算法复杂度为 O(m*n), 而kmp算法可以降到 O(m+n) 算法思路: 这个算法的切入点在于,当我们进行匹配,匹配到某个字符不一样时,前面匹配过的是字符 模式串和主串是一样的,即比如 主串: abaaabab 模式串: abab 假设我们把模式串分为三部分, 最长前缀+中间+最长后缀,(这里最长前缀和最长后缀...原创 2018-03-31 17:17:02 · 774 阅读 · 0 评论