算法
文章平均质量分 58
yangshuangtao
这个作者很懒,什么都没留下…
展开
-
经典面试题(四)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
1金币概率问题(威盛笔试题)题目:个房间里放着随机数量的金币。每个房间只能进入一次,并只能在一个房间中拿金币。一个人采取如下策略:前四个房间只看不拿。随后的房间只要看到比前四个房间都多的金币数,就拿。否则就拿最后一个房间的金币。编程计算这种策略拿到最多金币的概率。 这题真要用数学的方法计算,估计还真不好算。还好,题目要求用编程实现。这样它就成了一个模拟题,即用程序来模拟整个取转载 2015-04-22 19:33:16 · 458 阅读 · 0 评论 -
ACM常见算法分类
原创 2015-12-05 09:12:39 · 745 阅读 · 0 评论 -
散列表总结
本文整理自《算法导论》第11章,由于本章有一些概率论知识,因此理解起来比较困难,但是一般只要记住结果即可。我在面试的时候也被问过:“请问哈希冲突的解决方法有哪些?”,这个问题的答案是:第一种是链接技术,即用双向链表来链接哈希值相同的元素。这种方法能够有良好性能的前提是满足近似简单一致散列。第二种是开放寻址法,而开放寻址法有几种生成探查寻列的方法,如线性探查、二次探查、二次哈希(double转载 2015-12-05 08:32:52 · 344 阅读 · 0 评论 -
常见的排列和组合算法
1. 前言本文介绍了常用的排列组合算法,包括全排列算法,全组合算法,m个数选n个组合算法等。2. 排列算法常见的排列算法有:(A)字典序法(B)递增进位制数法(C)递减进位制数法(D)邻位对换法(E)递归法介绍常用的两种:(1) 字典序法对给定的字符集中的字符规定了一个先后关系,在此基础上按照顺序依次产生每个排列。[例]字符集{1,2,3},较小的数字较先,这样按字典序生成转载 2015-10-09 15:55:34 · 1335 阅读 · 0 评论 -
二叉树深度优先遍历和广度优先遍历
深度优先遍历,将一颗二叉树优先往更深层次遍历,先遍历根,然后分别是左子树和右子树,借助栈的数据结构来实现。先将右子树压栈,在将左子树压栈。void depthFirstSearch(Tree root){ stackNode *> nodeStack; //使用C++的STL标准模板库 nodeStack.push(root); Node *node;原创 2015-09-16 23:08:54 · 770 阅读 · 0 评论 -
如何在一个给定数组中找两个和为某个定值的数,要求时间复杂度为O(n)
由于数组中元素是按递增顺序排列,因此你可以从两端开始寻找减少比较次数 ,时间复杂度为O(1).#includeusing namespace std;bool find(int data[], int length, int num, int &num1, int &num2){ int head = 0; int tail = length - 1; while (head !=原创 2015-10-17 22:57:18 · 2559 阅读 · 0 评论 -
利用深度搜索法解决八皇后问题
八皇后问题每行必须有一个皇后,所以,对棋盘深搜时,第一个皇后的位置不妨设为第一行,这样只对第一行进行搜索,同理,第二个皇后不妨设为第二行,以此类推。下面附我的代码:#includeusing namespace std;struct node1{bool b[8][8]; };//棋盘模拟,不可以放皇后的地方值为0,可以为1;struct node2{ int x,y;转载 2015-09-13 11:40:40 · 1941 阅读 · 0 评论 -
插入排序
最好的情况是原来的序列已经是升序需要比较n-1次时间复杂度是O(n),最坏的情况是原来的序列是降序,需要比较n(n-1)/2次,时间复杂度是O(n2).只需要一个辅助空间,空间复杂度为O(1)#include void InsertSort(int arr[], int n){ for (int i = 1; i < n; ++i) { int tmp = arr[i];原创 2015-09-03 21:38:58 · 332 阅读 · 0 评论 -
几种排序算法比较
#includeint *mp_sort(int *a,int len)//冒泡排序{ if(a== NULL|| len <= 0) return NULL; int i = 1, j = 1; for (i; i < len - 1;++i) for (j = 0; j <len- i; ++j) { int temp; if (a[j]>a[j + 1])原创 2015-06-15 15:47:21 · 586 阅读 · 0 评论 -
二路插入排序
#include using namespace std; typedef int SqList[8]; void Binpath_Insertsort(SqList &L,int count) { int length = count - 1; int L1[length] = { 0 }; L1[0] = L[1];//L中的第一原创 2015-06-23 21:40:17 · 868 阅读 · 0 评论 -
迭代算法
迭代算法是用计算机处理问题的一种基本方法。它利用计算机运算速度快、适合做重复性操做的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。 利用迭代算法处理问题,需要做好以下三个方面的工做: 一、确定迭代变量。在能够用迭代算法处理的问题中,至少具有一个间接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。 二、建转载 2015-04-15 22:51:41 · 2829 阅读 · 0 评论 -
经典面试题(三)附答案 算法+数据结构+代码 微软Microsoft、谷歌Google、百度、腾讯
1.判断单链表是否有环,要求空间尽量少(2011年MTK)如何找出环的连接点在哪里?如何知道环的长度? 很经典的题目。1.判断是否有环。使用两个指针。一个每次前进1,另一个每次前进2,且都从链表第一个元素开始。显然,如果有环,两个指针必然会相遇。2.环的长度。记下第一次的相遇点,这个指针再次从相遇点出发,直到第二次相遇。此时,步长为1的指针所走的步数恰好就是环的长度。3.环的链接点。转载 2015-04-22 19:37:25 · 950 阅读 · 0 评论 -
再谈启发式搜索算法
一、何谓启发式搜索启发式搜索算法有点像广度优先搜索,不同的是,它会优先顺着有启发性和具有特定信息的节点搜索下去,这些节点可能是到达目标的最好路径。我们称这个过程为最优(best-first)或启发式搜索。下面是其基本思想:1) 假定有一个启发式(评估)函数ˆf ,可以帮助确定下一个要扩展的最优节点,我们采用一个约定,即ˆf的值小表示找到了好的节点。这个函数基于指定问题域的信息,转载 2015-12-05 09:17:46 · 5688 阅读 · 0 评论