
算法设计
文章平均质量分 72
yeshaoting
这个作者很懒,什么都没留下…
展开
-
动态规划与分治法 — 求解Fibonacci数列
Fibonacci数列 无穷数列1,1,2,3,5,8,13,21,34,55,…,被称为Fibonacci数列。它可以递归地定义为: 1. 分治法求Fibonacci数列 分治法将具有最优子结构性质的原问题分解成若干个子问题, 子问题相互独立.分治法通常采用递归操作实现. /*@author: jarg@...原创 2011-01-04 19:23:21 · 459 阅读 · 0 评论 -
【递归求解】大整数加法
问题描述:整数大到超过所有的基本数据所能表示的数据范围时的加法运算. 算法思路:递归的将大整数分割成二段,直至分割后的段可以用基本类型表示.由低段到高段的顺序,合并各段.值得注意的是,这种顺序是不可颠倒的,因为高段需要用到低段的进位.也就是说,低段的进位要参入紧挨的下一段的加和运算.所以,add(mid+1,endIndex);在add(beginIndex,mid);语句前....原创 2011-03-30 10:28:15 · 222 阅读 · 0 评论 -
【递归求解】合并排序
算法描述: 对n个元素进行排序 算法思想: 将待排序元素分成大小大致相同的2个子集合,分别对2个集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合. 实现程序:/** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All right reserved. * ...原创 2011-03-29 21:12:40 · 109 阅读 · 0 评论 -
递归算法的时间复杂度分析(转载)
递归算法的时间复杂度分析 在算法分析中,当一个算法中包含递归调用时,其时间复杂度的分析会转化为一个递归方程求解。实际上,这个问题是数学上求解渐近阶的问题,而递归方程的形式多种多样,其求解方法也是不一而足,比较常用的有以下四种方法: (1)代入法(Substitution Method) 代入法的基本步骤是先推测递归方程的显式解,然后用数学归纳法来...原创 2011-03-27 21:01:04 · 155 阅读 · 0 评论 -
【非递归求解】大整数加法
问题描述:整数大到超过所有的基本数据所能表示的数据范围时的加法运算. 算法思路:将大整数分割成可以用基本类型表现的几段,然后采用分治的思想,由低段到高段的顺序,将各段相加.低位的进位参入紧挨的下一段求和. /** * Copyright (c) 2011 Trusted Software and Mobile Computing(TSMC) * All ...原创 2011-03-27 17:14:18 · 142 阅读 · 0 评论 -
二分搜索技术
算法描述:二分搜索算法的基本思想是将n个元素分成个数大致相同的两半,取a[n/2]与x进行比较.如果x=a[x/2],则找到x,算法终止.如果x<a[n/2],则只要在数组a的左半部继续搜索x.如果x>a[n/2],则只要在数组a的右半部继续搜索. 实现程序:/** * Copyright (c) 2011 Trusted Software and Mobile...原创 2011-03-25 19:31:02 · 103 阅读 · 0 评论 -
整数划分问题
问题描述:将正整数n表示成一系列正整数之和,n=n1 + n2 + n3 + … + nk,其中n1≥n2≥n3≥…≥nk≥1,k≥1.正整数n的这种表示称为正整数n的划分.正整数n的不同划分个数称为正整数n的划分数,记作q(n). 实现程序:/** * Copyright (c) 2011 Trusted Software and Mobile Computing(TS...原创 2011-03-25 14:43:00 · 116 阅读 · 0 评论 -
百度二面智力题(破碎临界层)
题1 有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层???顺序查找:从1层往100层试题2 有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层???二...2011-10-24 12:52:53 · 766 阅读 · 0 评论 -
百度一面算法题(常数时间内求栈中最大值)
算法描述:一个栈stack,具有push和pop操作,其时间复杂度皆为O(1)。设计算法max操作,求栈中的最大值,该操作的时间复杂度也要求为O(1)。可以修改栈的存储方式,push,pop的操作,但是要保证O(1)的时间复杂度,空间时间复杂度无要求。思路:我借助一个变量count和一个数组空间(其实就是一个栈)完成该时间复杂度为O(1)的算法设计。...2011-10-24 12:35:39 · 157 阅读 · 0 评论 -
输出数组中数字排名(不允许并列排名)
输出数组中数字排名(不允许并列排名) 算法一(有缺陷的算法):将当前元素大于数组中元素的个数作为其排名。 /** * 算法一 * 思路:将每个数组中元素与整个数组中的所有元素(包括自身)比较, * 累计该元素大于等于整个数组中元素个数 * */private static void codeToLocation(dou...2011-10-24 10:06:34 · 535 阅读 · 0 评论 -
百度二面智力题(圆湖中的鸭子)
一、圆湖中的鸭子 一只狐狸在追一只鸭子,鸭子逃到了一个正圆形池塘的圆心O位置,狐狸不会游泳,鸭子也不能在水面上起飞,狐狸奔跑的速度是鸭子游泳速度的4倍。假设鸭子和狐狸分别遵循着最优的逃跑和追逐策略,请问:鸭子能不能安全地游到池塘边并起飞?如果能,如何才能做到?解:设圆的半径是R,由已知鸭子的速度是V,狐狸的速度是4V,可以得知,当鸭子在距离圆心R/4之内(图中深色部分...原创 2011-10-13 14:05:14 · 1133 阅读 · 0 评论 -
分治法与动态规划小结
最近才捡起的算法设计与分析.分析不准确的地方谅解,请各位看官指正. 1. 分治法与动态规划主要共同点:二者都要求原问题具有最优子结构性质,都是将原问题分而治之,分解成若干个规模较小(小到很容易解决的程序)的子问题.然后将子问题的解合并,形成原问题的解. 2. 分治法与动态规划实现方法:① 分治法通常利用递归求解.② 动态规划通常利用迭代法自底向上求解,但也能用具有记忆功能的递归法自...2011-01-07 13:05:19 · 480 阅读 · 0 评论 -
贪心算法 - 0-1背包问题(转载)
贪心算法——0-1背包问题0/1 背包问题有一个容量为weight的背包,现在要从n件物品中选取若干件装入背包中,每件物品i的重量为w[i],价值为p[i]。定义一种可行的背包装载为:背包中物品的总重不能超过背包的容量,并且一件物品要么全部选取,要么不选取。定义最佳装载是指所装入的物品价值最高,并且是可行的背包装载。【样例输入】11 {weight}4 {n}2 4 6 7 {w[i]...原创 2011-01-05 18:55:03 · 702 阅读 · 0 评论 -
贪心算法 - 三种贪心选择策略 - 求解0-1背包问题
贪心算法能解决背包问题,但是不能解决0-1背包问题.用算法问解0-1背包问题时,其解不一定是最优解,得到的可能是近似最优解.根据选择的贪心策略选择的不同,得到的近似最优解也不尽相同. /*@author jarg@TODO 贪心算法 - 求解0-1背包问题贪心策略: 1. 单价 2. 重量 3. 单位价值*/import java.util.*;pu...原创 2011-01-05 18:50:55 · 1580 阅读 · 0 评论 -
动态规划 - 求解二项式系数(自顶向下,自底向上)
1. 动态规划 备忘录法备忘录方法采用自顶向下方式,为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。 说明: 在非边界条件下,每次求解子问题时,先查找备忘录.若子问题已经求解过了,直接取出子问题的解;若未求解过,则求解并保存到备忘录中.此处的备忘录就是一个存储数据的容器. /*@author: jarg@TODO 动态规划 ...2011-01-05 10:33:04 · 581 阅读 · 0 评论 -
动态规划 - 求解二项式系数(完整代码)
1. 动态规划 备忘录法备忘录方法采用自顶向下方式,为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。 /*@author: jarg@TODO 动态规划 - 备忘录法 求解二项式系数*/import java.io.*;import java.util.*;public class Binomial{ /* M...原创 2011-01-04 21:34:51 · 457 阅读 · 0 评论 -
【分治法】快速排序
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(来自百度百科) 实现程序:/** * Copyright (c) 2011 Trusted Software and Mobile Computing(T...原创 2011-04-07 20:23:46 · 96 阅读 · 0 评论