算法
文章平均质量分 73
小拳头
“女生,平时要好好护肤,保持身材,多看书,多旅行,有自己的想法,去做自己喜欢的事,培养自信。不要把精力全部用在一个男人身上,成天胡思乱想,像个怨妇,等你变得更好的时候,你会发现所有的事情都会变得很容易了,包括爱情”
展开
-
Floyd判圈算法(龟兔赛跑算法)
一、算法简述Floyd判圈算法(Floyd Cycle Detection Algorithm),又称龟兔赛跑算法(Tortoise and Hare Algorithm),是一个可以在有限状态机、迭代函数或者链表上判断是否存在环,以及判断环的起点与长度的算法。二、基本思路在某种关系下,顶点 i 到 k 拓扑有序,顶点 k 到 j 也是相同的顺序,那么 i 和原创 2016-06-09 14:51:36 · 5583 阅读 · 1 评论 -
计算一个数的二进制表示中0和1个数的方法
常见的一个方法是:x&(x-1) 的作用是对一个数中二进制1的个数进行统计x|(x+1) 的作用是对一个数中二进制0的个数进行统计 今天做牛客网上的题,又学习到了一个新的算法,叫做平行算法,用来计算二进制的1的个数intBitCount(unsigned int n){ n = (n &0x55555555) + ((n >>1)&0x55555555) ;原创 2017-06-30 17:29:12 · 7751 阅读 · 0 评论 -
KMP算法c++实现
一、原理看下面视频http://baidu.ku6.com/watch/1196605033445674118.html?page=videoMultiNeed二、c++代码:#include#include#include#includeusing namespace std;void get_next(string s1, int next[]){原创 2017-03-16 21:44:28 · 1256 阅读 · 0 评论 -
背包问题总结
本文基于背包九讲的内容编写,添加了例题和一些自己的想法。 一、01背包问题题目:有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。基本思路:这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放 假设f[i][v]表示前i件物品恰放入一个容量为v的背包可以原创 2016-12-04 15:09:09 · 3984 阅读 · 0 评论 -
快速幂算法
快速幂算法求超大次幂的算法,可将时间复杂度从O(n)降为O(log2n) 公式就是要求a的b次方,如果b为偶数,那么ab= ab/2 * ab/2,如果b为奇数,那么ab = a(b-1)/2 * a(b-1)/2 * a;然后对ab/2同理递归。//求a的b次方int pow(int a,int b){ int r = 1, base = a;原创 2017-04-02 16:22:42 · 690 阅读 · 0 评论 -
求最大公约数和最小公倍数算法
一、求最大公约数:欧几里德算法欧几里德算法又称辗转相除法,用于计算两个正整数a,b的最大公约数其计算原理依赖于下面的定理:定理:两个整数的最大公约数等于其中较小的那个数和两数相除余数的最大公约数。最大公约数缩写为gcd。gcd(a, b) = gcd(b, a mod b)(前提条件是假设a > b 且 r = a mod b, r 不为0)c++代码://两个数的原创 2017-03-13 16:05:18 · 18998 阅读 · 0 评论 -
动态规划问题总结
一、什么是动态规划?动态规划算法通常基于一个递推公式及一个或多个初始状态。当前子问题的解将由上一次子问题的解推出。使用动态规划来解题只需要多项式的时间复杂度。 二、例子讲解首先,我们要找到某个状态的最优解,然后在它的帮助下,找到下一个状态的最优解。 用leetcode上的198题House Robber作为一个入门例子吧。链接:https://leetcode.com/原创 2016-10-12 15:09:30 · 1107 阅读 · 0 评论 -
回文数算法
一、概念一个正数如果顺着和反过来都是一样的(比如12321,反过来也是12321),那么就称为回文数。注意:(1)回文数不能以0开头。 (2)回文数从1开始。二、初始想法写一个循环算出逆序的值,判断原序和逆序是否相等。这种思路可以算出正确结果,但是随着N的增大,效率太低。三、回文数算法发现回文数的个数的规律,如下:原创 2016-06-21 09:36:52 · 21417 阅读 · 0 评论 -
找质数算法之埃拉托色尼筛选法(Sieve of Eratosthenes算法)
一、算法原理一个合数总是可以分解成若干个质数的乘积,那么如果把质数(最初只知道2是质数)的倍数都去掉,那么剩下的就是质数了。二、步骤(1)先把1删除(1既不是质数也不是合数)(2)读取队列中当前最小的数2,然后把2的倍数删去(3)读取队列中当前最小的数3,然后把3的倍数删去(4)读取队列中当前最小的数5,然后把5的倍数删去.......(n)原创 2016-07-03 23:51:29 · 11978 阅读 · 0 评论 -
最大子序列、最长递增子序列、最长公共子串、最长公共子序列、字符串编辑距离总结
一、最长公共子串和最长公共子序列最长公共子串(Longest Common Substring)是串的一个连续的部分。最长公共子序列(Longest Common Subsequence,LCS)是不一定是连续的,但是不改变序列中元素在原串中的相对顺序,而是从序列中去掉任意的元素而获得新的序列。也就是说,子串中字符的位置必须是连续的,子序列则可以不连续。 二、思想采用动态规划的思想原创 2016-11-20 22:05:30 · 1408 阅读 · 0 评论