
经典算法
文章平均质量分 73
故常无-欲以观其妙
行胜于言
展开
-
使用快速傅里叶变换计算大整数乘法-代码
在上一篇随笔“使用快速傅里叶变换计算大整数乘法”中,已经讲述了使用快速傅里叶变换计算大整数乘法的原理。在这一篇随笔中,我们就使用快速傅里叶变换来实现一个提供任意精度的算术运算的静态类:BigArithmetic。下面就是 BigArithmetic 类源程序代码: 1 using System; 2 using System.Diagnostics; 3转载 2016-04-28 22:47:34 · 9362 阅读 · 0 评论 -
BM(Boyer-Moore)算法
一.简述 在当前用于查找子字符串的算法中,BM(Boyer-Moore)算法是当前有效且应用比较广的一中算法,各种文本编辑器的“查找”功能(Ctrl+F),大多采用Boyer-Moore算法。比我们在学习的KMP算法快3~5倍。 Boyer-Moore算法不仅效率高,而且构思巧妙,容易理解。1977年,德克萨斯大学的Robert S. Boyer教授和J Str转载 2016-08-29 09:58:06 · 747 阅读 · 0 评论 -
动态规划解决最长公共子序列和最长公共子串
问题描述找两个字符串的最长公共子串,这个子串要求在原字符串中是连续的。 而找两个字符串的最长公共子序列,只要求子序列的字符都在原字符串中出现且保持相对顺序不对解决思路动态规划1.最长公共子串,S1=a1a2a3..amS_1=a_1a_2a_3..a_m S2=b1b2b3..bnS_2=b_1b_2b_3..b_n 状态转移方程 记f(i,j)是以a[i]和b[j]结尾的字符串的最长公共子原创 2016-06-06 17:48:27 · 413 阅读 · 0 评论 -
证明:log(n!)与nlogn是等价无穷大
证明:log(n!)与nlogn是等价无穷大 分类: Mathematics(6) (log的底大于1即可)1、首先由Stirling's formula:也就是分子、分母是等价无穷大(n->oo)。2、再来证明log(n!) 与 nlogn是等价无穷大(n->oo):挺不可转载 2016-05-29 12:26:36 · 8683 阅读 · 1 评论 -
BAT网易经典题
8月15日,百度2道面试题:1、来自《编程之美》的概率题:一个桶里面有白球、黑球各100个,现在按下述规则取球:的 i 、每次从通里面拿出来两个球; ii、如果取出的是两个同色的求,就再放入一个黑球; ii、如果取出的是两个异色的求,就再放入一个白球。问:最后桶里面只剩下一个黑球的概率是多少?2、算法题:给你一个自然数N,求[6,N]之内的所有素数中,两两转载 2016-05-27 15:34:32 · 20295 阅读 · 0 评论 -
强大的异或运算-深度好文
什么是异或?Wikipedia的解释:在逻辑学中,逻辑算符异或(exclusive or)是对两个运算元的一种逻辑析取类型,符号为 XOR 或 EOR 或 ⊕(编程语言中常用^)。但与一般的逻辑或不同,异或算符的值为真仅当两个运算元中恰有一个的值为真,而另外一个的值为非真。转化为命题,就是:“两者的值不同。”或“有且仅有一个为真。”定义:1 ⊕ 1 = 00 ⊕ 0转载 2016-05-01 12:02:46 · 3311 阅读 · 0 评论 -
深入浅出KMP
字符串匹配是计算机的基本任务之一。举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。这种算法不太容易理解,网上转载 2016-04-30 20:20:50 · 2304 阅读 · 0 评论 -
从二分看算法严谨性
考虑以下二分查找的代码:#include <stdio.h>intbsearch(intarray[], intn, intv){ intleft, right, middle; left = 0, right = n - 1; while(left <= right) { middle = left + (right - left) / 2;原创 2016-04-20 17:56:15 · 6461 阅读 · 0 评论 -
编辑距离及编辑距离算法
编辑距离概念描述:编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting:sitten (k→s) sittin (e→i) sitting (→g) 俄罗斯科学家Vladimir Levenshtein在1965年提出这个概念。原创 2016-04-24 11:19:00 · 5233 阅读 · 0 评论 -
n组字母和最大
字母A-J,用0-9对应字母使得n组数据和最大,输入字符串前面保证非0 如输入组数据: 2 ABC BCA 输出: 1875思路:其实就是求和,对应字符乘以相应的量级,按系数排序 如上MAX(101A+110B+11C) 那B:9 A:8,C:7产生最大和 同时考虑类型为字符串涉及字符串加法#include <algorithm>#include <iostream>#inc原创 2016-04-27 22:39:30 · 4594 阅读 · 0 评论 -
傅里叶变换与大数乘法
我们知道,两个 N 位数字的整数的乘法,如果使用常规的算法,时间复杂度是 O(N2)。然而,使用快速傅里叶变换,时间复杂度可以降低到 O(N logN loglogN)。 假设我们要计算以下两个 N 位数字的乘积:a = (aN-1aN-2...a1a0)10 = aN-1x10N-1 + aN-2x10N-2 + ... + a1x101 + a0x100b =转载 2016-04-28 22:05:34 · 8495 阅读 · 0 评论 -
karatsuba乘法
karatsuba乘法Karatsuba乘法是一种快速乘法。此算法在1960年由Anatolii Alexeevitch Karatsuba 提出,并于1962年得以发表。[1] 此算法主要用于两个大数相乘。普通乘法的复杂度是n2,而Karatsuba算法的复杂度仅为3nlog3≈3n1.585(log3是以2为底的)[2] 。目录1 算法描转载 2016-04-28 22:46:10 · 5233 阅读 · 0 评论 -
常见的数据结构与算法时间复杂度
这篇文章覆盖了计算机科学里面常见算法的时间和空间的大 OBig-O 复杂度。我之前在参加面试前,经常需要花费很多时间从互联网上查找各种搜索和排序算法的优劣,以便我在面试时不会被问住。最近这几年,我面试了几家硅谷的初创企业和一些更大一些的公司,如 Yahoo、eBay、LinkedIn 和 Google,每次我都需要准备这个,我就在问自己,“为什么没有人创建一个漂亮的大 O 速查表呢?”所以,为转载 2016-11-16 14:25:11 · 960 阅读 · 0 评论