算法
文章平均质量分 78
Ajay666
这个作者很懒,什么都没留下…
展开
-
最近点对问题
问题描述:以(x,y)表示一个点,随机生成n个点,求出最近的一对点。解法一:蛮力法思路:用一个变量minD记录最近的距离,初始值为无穷大(int的最大表示范围),然后在n个点选取2个点(组合问题,一共有C n取2种可能),计算它们的距离,如果比minD小,更新minD的值,一直循环,复杂度为O(n*n)。 上代码(下述所有代码样例的头文件都一样,用codeblock编译器执行):#include原创 2016-10-11 21:14:01 · 962 阅读 · 0 评论 -
小明学C++第二篇:数据类型、数据结构、算法
语言跟文字是人类文明的象征。而数字的发明则意味着人类逻辑与理性思维的一面。从文艺复兴到电气时代,艺术和科学似乎交替地发展。在上世纪,人类发明出了计算机,从此加快了科学的发展,改变了我们的世界。计算机的核心是以数学的基础的计算科学,计算科学着眼于什么问题是可以计算的,什么是不可计算的,可以计算的问题又如何更加高效地进行计算。经过了几十年的发展,计算机领域已经积累了其特有的技术,有些算法也让人深感思想的原创 2017-08-23 22:10:29 · 984 阅读 · 0 评论 -
B-树和B+树
前面提到的平衡二叉树用于查找十分方便,但是这种树只能用于数据量较小的场景。当数据集较大,比如有几百万行记录的文件,其容量超过了内存的大小,就需要储存在磁盘上。在这种时候,平衡二叉树的表现并不理想,因此需要一种更好的数据结构(在数据库中叫做索引)来加快查找,这就是B树或者B+树。B-树(balance-search-tree)一颗m阶的B-树或为空树,或为满足下列特性的m叉树: (1)树中每个节点原创 2017-08-11 12:11:55 · 611 阅读 · 0 评论 -
二叉排序树、平衡二叉树以及红黑树
现实生活中,有很多找东西的例子,比如在学校找某个人,在驿站找快递,在信息登记表上查找某个人的信息,那么在计算机科学中,具体有哪些可以加快查找的算法?下面我们就来看看其中的动态查找算法,动态查找的意思是当你查找某个键值的信息,若存在则输出,否则将插入该键值为后续进行查找。二叉排序树首先我们来看看二叉排序树,二叉排序树有点类似于二分查找的思路,但是它用树的形式来表示查找的方向。 定义: (1)一个原创 2017-08-09 22:00:12 · 1324 阅读 · 0 评论 -
谷歌面试题-100层楼两个棋子的问题
谷歌公司有道面试题:有一个100层高的大厦,从这个大厦的某一层扔下棋子恰好就会碎(称这一层为临界层)。请你用手中的两个玻璃围棋子,找出一个最优的策略来得知那个临界层。 解法:假设在最坏情况下投掷的最少次数为x,即无论临界层为几,投掷次数都小于等于x。那么我第一次投掷的楼层为x,此时有两种情况: (1)围棋子碎了:用第二个围棋子从1到x-1投掷,最多一共投掷x次可以确定临界层。 (2)围棋子没有原创 2017-05-07 19:54:02 · 1963 阅读 · 0 评论 -
C++后台开发面试笔记
前言我想先说我的感受: 专精计算机的一个方向,在平时学习的过程中注意积累,遇到问题最好深入了解,不要浅尝辄止。如果坚定了走程序员道路,就要在计算机方面保持兴趣与好奇心。平时广泛涉猎相关的领域(比如你搞后台就要懂安全),并且注重结果的展示(比如写博客),这个很重要。电话面试前几天我走了一个公司的内推,然后目前经历了电话面试的一面和二面,对于结果我感觉比较悬,现在我先写下电话面试的题目并尝试做出解答(有原创 2017-04-14 11:08:26 · 853 阅读 · 0 评论 -
算法笔记-堆排序
前言:前几天在面试中被问到一个问题:如何在100个数中找出前5大的数?其实我知道这是一个很经典的算法题,我也曾在刷剑指offer编程题的时候做过这道题,当时我是用最简单的冒泡排序来做的,比如上面那个问题就可以用冒泡五次来找到前5大的数。这个解法的时间复杂度是O(n*k),其中n是数据规模,k是找出前k个大小的数。后来,我发现了一种更高效的解法-堆排序算法,维持一个k大小的最大堆,遍历后面的元素,如果原创 2017-04-08 17:07:18 · 643 阅读 · 0 评论 -
简单选择排序
简单选择:简单选择顾名思义,就是第一次选择最小的元素放到数组第一位,第二次选择次小的放到数组第二位,以此类推,循环n次,直到数组有序为止。 //选择排序算法void select_sort(int * a, int n){ int i,j,index; for(i =0 ;i<n;++i) { index = i; //遍历数组,寻找当前最原创 2016-09-28 22:04:01 · 402 阅读 · 0 评论 -
插入排序
中心思想:考虑你正在斗地主,对方发给你一堆牌,你右手摸牌,左手拿牌,第一次摸到10放到左手,第二次摸到3就放到10左边,第三次摸到K放10右边,左手上的牌一直保持有序,直到左手拿着所有的牌为止。这就是插入排序。 插入排序从第二个元素开始,在前面已排好序的序列中寻找合适的位置并插入,使之仍然有序。 插入排序最多的步骤在于移位操作,每个元素插入之前,数组的大于待插入值的元素必须事先挪位,故插入排序在原创 2016-09-28 10:22:56 · 382 阅读 · 0 评论 -
2017腾讯校招笔试编程题-拼凑零钱
今天刚刚参加了2017年的腾讯校招在线笔试,其中有一道编程题是这样的:小明很富有,有币值为2^n(n=0,1,2,3)的硬币各两个,即有两个1块钱的硬币,有两个2块钱的硬币,有两个四块钱的硬币。。。,现在输入一个正整数数m(0比如输入6,则输出3,因为6=2+4=1+1+4=1+1+2+2。下面是我的解法:#include using namespace std;int cnt=0原创 2017-09-13 19:09:51 · 3306 阅读 · 1 评论