算法
文章平均质量分 61
ningzero123
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
交换两个数的算法
交换两个数的操作在编程中十分常见,下面总结一下几种方法:(假设要交换的两个数为a和b)方法一:利用临时变量tmp = a;a = b;b = tmp;方法二:利用加减法或者乘除法a = a + b;b = a - b;a = a - b;或简写成a += b;b = a - b;a -= b;用乘除法的a原创 2013-03-30 20:46:11 · 1059 阅读 · 0 评论 -
常用算法二(动态规划)
转载自:http://blog.youkuaiyun.com/com_stu_zhang/article/details/7233763一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。二、基本思想与策略 基本思想与分治法类似,也是将待求解的问转载 2013-04-05 15:25:23 · 477 阅读 · 0 评论 -
常用算法五(分支限界法)
一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,即在某种意义下的最优解。 (1)分支搜索算法 所谓“分支”就是采用广度优转载 2013-04-05 15:35:09 · 568 阅读 · 0 评论 -
常用算法四(回溯算法)
1、基本概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。转载 2013-04-05 15:30:36 · 603 阅读 · 0 评论 -
常用算法一(分治算法)
转载自:http://blog.youkuaiyun.com/com_stu_zhang/article/details/7233761一、基本概念 在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个技巧是很多高效算法转载 2013-04-05 15:22:46 · 510 阅读 · 0 评论 -
常用算法三(贪心算法)
转载自:http://blog.youkuaiyun.com/com_stu_zhang/article/details/7233770一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不转载 2013-04-05 15:26:09 · 404 阅读 · 0 评论 -
查找两个已经排好序的数组的第k大的元素
题目意思:给出两个排好序的数组 ,不妨设为a,b都按升序排列,及k的值,求出第k大的那个元素。分析这个题目,如果题目没有时间复杂度的要求,我们可以定义两个指针i,j分别指向a,b,如果a[i]j++,这个记录下走了多少步,如果==k步,则找到了第k大的元素,复杂度为O(k).那么如果有复杂度的要求,要求为O(log(len_a+len_b))呢,这个就得好好考虑,怎么利用二转载 2013-04-12 11:18:33 · 534 阅读 · 0 评论 -
已排序二维数组中的二分查找
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。例如下面的二维数组就是每行、每列都递增排序。如果在这个数组中查找数字7,则返回true;如果查找数字5,由于数组不含有该数字,则返回false。 我的解题思路是这样的矩阵行列都是从小到大排好序的,要查找转载 2013-04-17 19:46:26 · 854 阅读 · 0 评论 -
哈夫曼树
1. 哈夫曼树的基本概念 哈夫曼树( Huffman )又称最优二叉树,是一类带权路径长度最短的树,有着广泛的应用。 在讨论哈夫曼树之前首先需要弄清楚关于路径和路径长度的概念。树中两个结点之间的路径由一个结点到另一结点的分支构成。两结点之间的路径长度是路径上分支的数目。树的路径长度是从根结点到每一个结点的路径长度之和。 设一棵二叉树有 n 个叶子结点,每个叶子结点拥有一个权值W转载 2013-04-19 11:17:45 · 907 阅读 · 0 评论 -
最长递增子序列 (Longest Increasing Subsequence)
问题描述: 给定一个序列 An = a1 ,a2 , ... , an ,找出最长的子序列使得对所有 i j ,ai aj 。显然,暴力算法的时间复杂度是 O(2n ) ,因为搜索空间呈指数级增长。对于这种问题,如果要找复杂度为多项式时间的算法,自然而然地会想到动态规划。首先,要找出一种方法把该问题分解成只有多项式个子问题。考虑 a n。如果最长递增子序列不 包含 an ,则问题变成转载 2013-04-20 09:47:23 · 535 阅读 · 0 评论 -
给定数组a[N]构造数组b[N]——腾讯笔试
给定一个数组a[N],我们希望构造数组b [N],其中b[j]=a[0]*a[1]…a[N-1] / a[j],在构造过程中,不允许使用除法:要求O(1)空间复杂度和O(n)的时间复杂度;除遍历计数器与a[N] b[N]外,不可使用新的变量(包括栈临时变量、堆空间和全局静态变量等) 解析:设b[0]=1由b[i]=b[i-1]*a[i-1]可得b[1] =转载 2013-04-20 16:04:24 · 590 阅读 · 0 评论 -
100层楼丢玻璃球问题
有一栋100层高的大楼,给你两个完全相同的玻璃球。假设从某一层开始,丢下玻璃球会摔碎。那么怎么利用手中的两个球,用什么最优策略知道这个临界的层是第几层??解题思路: 假如只有一个球,那很显然,只有一个办法:从第一层开始投,如果没碎再试第二层、第三层..... 现在有两个球,我们应该利用第一个球缩小临界楼层所在的楼层范围,可能会想到第一个球先从50层开转载 2013-04-20 17:16:28 · 979 阅读 · 0 评论 -
n个元素进栈,共有多少种出栈顺序?
近日在复习数据结构,看到栈的时候,发现1个元素进栈,有1种出栈顺序;2个元素进栈,有2种出栈顺序;3个元素进栈,有5种出栈顺序,那么一个很自然地问题就是n个元素进栈,共有多少种出栈顺序?说来惭愧,以前学数据结构的时候竟然没有考虑过这个问题。最近在看动态规划,所以“子问题”这3个字一直在我脑中徘徊,于是解决这个问题的时候我也是用类似“子问题”的方法,说白了就是递推公式。转载 2013-04-20 09:54:20 · 950 阅读 · 0 评论 -
猜[1,100]之间的数字——腾讯笔试题
题目为:A、B两人玩猜字游戏,游戏规则如下:A选定一个 [1,100]之间的数字背对B写在纸上,然后让B开始猜;如果B猜的偏小,A会提示B这次猜的偏小;一旦B某次猜的偏大,A就不再提示,此次之后B猜的偏小A也不会再提示,只回答猜对与否。请问:B至少要猜多少次才能保证猜对?在这种策略下,B第一次猜测的数字是什么? 先说答案:猜测序列为14, 27, 39, 50, 60,69原创 2013-04-21 10:39:48 · 3661 阅读 · 0 评论 -
Catalan数问题总结
卡特兰数:规定C0=1,而C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,C7=429,C8=1430,C9=4862,C10=16796,C11=58786,C12=208012,C13=742900,C14=2674440,C15=9694845·········································卡塔兰数的一般项转载 2013-05-05 08:17:49 · 618 阅读 · 0 评论
分享