算法
画喜
计算机小白,努力学习
展开
-
分治法
分治法的基本思想:将规模为N的问题分解为k个规模较小的子问题,使这些子问题相互独立可分别求解,再将k个子问题的解合并成原问题的解.如子问题的规模仍很大,则反复分解直到问题小到可直接求解为止。 在分治法中,子问题的解法通常与原问题相同,自然导致递归过程。通过分治法解决大问题的时间等于所有解决小问题的时间?T(n)=aT(n/b)+f(n)递推式的解法原创 2016-08-18 23:06:05 · 173 阅读 · 0 评论 -
经典算法面试题及答案
经典算法面试题及答案 1. 时针分针重合几次表面上有60个小格,每小格代表一分钟,时针每分钟走1/12小格,分针每分钟走1小格,从第一次重合到第二次重合分针比时针多走一圈即60小格,所以60/(1-1/12)=720/11每隔720/11分才重合一次(而并不是每小时重合一次)1440里有22个720/11,如果说算上0点和24点,那也转载 2016-09-25 02:26:47 · 2040 阅读 · 0 评论 -
字符串的全排列和组合算法
http://blog.csdn.net/hackbuteer1/article/details/7462447 hackbuteer1全排列在笔试面试中很热门,因为它难度适中,既可以考察递归实现,又能进一步考察非递归的实现,便于区分出考生的水平。所以在百度和迅雷的校园招聘以及程序员和软件设计师的考试中都考到了,因此本文对全排列作下总结帮助大家更好的学习和理解。对本文有任何补充之处,欢转载 2016-10-22 13:28:28 · 319 阅读 · 0 评论 -
排序算法之冒泡排序
原理:比较相邻的元素,将大的元素交换到右边的位置,重复多次后,最大元素就“沉淀”到列表的最后一个位置。第二遍将第二大元素沉下去,n-1遍后结束。例题:对序列 {89,45,68,90,29,34,17}用冒泡排序算法进行排序第1遍: {8945,68,90,29,34,17} //比较相邻元素 {45,89 68,90,29,34,17}原创 2016-08-19 11:05:33 · 308 阅读 · 0 评论 -
排序算法之快速排序
(百度百科)快速排序(Quicksort)是对冒泡排序的一种改进。数组是A[0]……A[N-1]任意选取一个数据(通常选用数组的第一个数)作为关键数据所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。一趟快速排序的算法是:转载 2016-08-13 16:59:45 · 694 阅读 · 0 评论 -
排序算法之堆排序
堆排序它是不稳定的排序方法。(排序的稳定性是指如果在排序的序列中,存在前后相同的两个元素的话,排序前 和排序后他们的相对位置不发生变化)前提理解:大根堆和小根堆:都是完全二叉树,根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最小者的堆称为小根堆,又称最小堆。根结点(亦称为堆顶)的关键字是堆里所有结点关键字中最大者,称为大根堆,又称最大堆。大根堆的要求是每个节点的值都原创 2016-08-16 21:55:29 · 278 阅读 · 0 评论 -
动态规划
作者:Hawstein出处:http://hawstein.com/posts/dp-novice-to-advanced.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注明作者及出处。前言本文翻译自TopCoder上的一篇文章: Dynamic Programmin转载 2016-08-20 18:24:21 · 320 阅读 · 0 评论 -
排序算法之二分查找
二分查找又称折半查找优点是比较次数少,查找速度快,平均性能好缺点是要求待查表为有序表,且插入删除困难。1.必须采用顺序存储结构 2.必须按关键字大小有序排列。二分查找的基本思想是将n个元素分成大致相等的两部分,取a[n/2]与x做比较,如果x=a[n/2],则找到x,算法中止;如果xa[n/2],则只要在数组a的右半部搜索x.转载 2016-08-13 17:44:44 · 452 阅读 · 0 评论 -
如何处理海量数据(转)
在实际的工作环境下,许多人会遇到海量数据这个复杂而艰巨的问题,它的主要难点有以下几个方面:一、数据量过大,数据中什么情况都可能存在。如果说有10条数据,那么大不了每条去逐一检查,人为处理,如果有上百条数据,也可以考虑,如果数据上到千万级别,甚至 过亿,那不是手工能解决的了,必须通过工具或者程序进行处理,尤其海量的数据中,什么情况都可能存在,例如,数据中某处格式出了问题,尤其在程序处转载 2016-09-24 23:34:31 · 400 阅读 · 0 评论 -
深度优先搜索与广度优先搜索
转载http://blog.csdn.net/andyelvis/article/details/1728378有两种常用的方法可用来搜索图:即深度优先搜索和广度优先搜索。它们最终都会到达所有连通的顶点。深度优先搜索通过栈来实现,而广度优先搜索通过队列来实现。 深度优先搜索:下面图中的数字显示了深度优先搜索顶点被访问的顺序。为了实现深度优先搜索,首先选择一个起始顶点并需要转载 2016-09-21 16:59:30 · 349 阅读 · 0 评论 -
排序算法之合并排序
合并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。算法思路: 若n为1,算法终止;否则,将n个待排元素分割成k(k=2)个大致相等子集合A、B,对每一个子集合分别递归排序,再将排好序的子集归并为一个集合。分为两部分:一.递归算法二.归并排序C++代码(百度百科)原创 2016-08-19 11:20:15 · 860 阅读 · 0 评论 -
排序算法之选择排序
原理:扫描整个列表,找出最小(或最大)元素,然后将最小(或最大)元素与第一个元素交换位置。从第二个元素开始扫描列表,找出n-1个元素中的最小(或最大)元素,将最小(或最大)元素与第二个元素交换位置,如此类推,做n-1遍后排序结束例题:对序列 {89,45,68,90,29,34,17}用选择排序 算法进行排序第1遍: {89,45,68,90,29,34,17} //求最小元素原创 2016-08-18 21:45:19 · 559 阅读 · 0 评论 -
暴力字符串匹配
从文本中寻找匹配模式的子串,即求出第一个匹配模式的子串在文本中的开始位置(子串最左元素的下标)。其中:文本——给定的由n个字符组成的串 模式——指定的由m个字符组成的串将模式对准文本的前m个字符从左往右进行比对,如果其中有一个字符不匹配,模式往右移动一位继续下一个m个字符的比对。伪代码:BruteForceStringMatch(T[0原创 2016-08-20 18:34:30 · 591 阅读 · 0 评论 -
大整数乘法
整数乘法问题: 设A和B为两个N位的整数,计算它们的乘积A · B。要执行一位乘法多少次? N^2次分治法思想令N为偶数,则A和B可表示为其中a1和a2分别为A的前半部和后半部。bl 和b2则分别为B的前半部和后半部。如果按下述方法得到积(多项式相乘) 估算时间效率是多少(即需要多少次一位乘法)?则要4次N/2位乘法,即N2次一位乘法。因此这种方原创 2016-08-19 18:06:39 · 929 阅读 · 0 评论 -
给定N张扑克牌和一个随机函数,设计一个洗牌算法
假定N=54,首先,我们有一个随机函数发生器,能够产生1-54之间的随机数,如何保证抽第一张牌是54中可能,抽第二张牌是53中可能,……可以这样做,假设扑克牌是一个54维的数组card, 我们要做的就是从这个数组中随机取一个元素,然后在剩下的元素里再随机取一个元素… 这里涉及到一个问题,就是每次取完元素后,我们就不会让这个元素参与下一次的选取。int index=i+rand(转载 2016-09-14 17:02:42 · 1186 阅读 · 0 评论 -
排序算法之插入排序
稳定排序的一种(通俗地讲,就是两个相等的数不会交换位置) 。常用的插入排序有:直接插入排序、折半插入排序它们划分的依据是在排好序的序列中寻找插入位置所使用方法的不同。原创 2016-08-25 19:45:03 · 270 阅读 · 0 评论 -
reorder-list
Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→…You must do this in-place without altering the nodes' values.For example,Given{1,2,3,4}, reorder it to转载 2016-11-01 20:43:37 · 244 阅读 · 0 评论