随笔分类 - 算法以及分析
摘要:有这样一道排序题:数组里有20个随机数,取值范围为从0到10,要求用最快的速度把这20个整数从小到大进行排序。 第一时间你可能会想使用快速排序,因为快排的时间复杂度只有O(nlogn)。但是这种方法还是不够快,有没有比O(nlogn)更快的排序方法呢?你可能会有疑问:O(nlogn)已经是最快的排序
        阅读全文
                
摘要:这个主要是通过二进制来生成子集,比如三个元素总共二进制数有2^3个,然后通过0 2^3中每个数和1进行位于然后得出哪位有1最后就可以得出每个子集 void print_subset(int n,int s) 2 { 3 for(int i = 0;i<n;i++) 4 { 5 //cout << s
        阅读全文
                
摘要:首先介绍:邻位互换算法 原理:首先会先给数据排序(从小到大),然后给这些数据赋上移动数据,比如最开始都给他们赋值为-1表示能向左移,其实在这里只用一个新数组来存储移位数据就可以了,比如我们现在3是可以左移的,3的位置是2,然后通过去找移位数组里面的值,发现对于位置2的值为-1,只用拿2-1就可以得到
        阅读全文
                
摘要:通过数代人的努力,你终于赶上了剩男剩女的大潮,假设你是一位光荣的新世纪媒人,在你的手上有N个剩男,M个剩女,每个人都可能对多名异性有好感(-_-||暂时不考虑特殊的性取向),如果一对男女互有好感,那么你就可以把这一对撮合在一起,现在让我们无视掉所有的单相思(好忧伤的感觉),你拥有的大概就是下面这样一
        阅读全文
                
摘要:插入排序的基本思想是:将数组的第一个数认为是有序数组,从后往前(从前往后)扫描该有序数组,把数组中其余n-1个数,根据数值的大小,插入到有序数组中,直至数组中的所有数有序排列为止。这样的话,n个元素需要进行n-1趟排序!!! 举个例子:4个数字4,6,7,5进行从大到小的排序。前插排序法具体过程如下
        阅读全文
                
摘要:通过前面的快速排序算法我们基本上已经知道,它是通过两个标记点把左边分为大于首元素的部分,右边为小于首元素的部分。然后又再给左右两边用快速排序。 然后现在我们提出一个问题,如果任意给定的一个数组,我们现在要找出它里面第几大的元素。这时该怎么办?先排序吗?你要知道就算是快速排序的复杂度也是nlogn。那
        阅读全文
                
摘要:归并排序其实就把数组分成两个部分,然后进行递归,依次排序。 其实一直分的话,最后数组会被分为2个2个一组的数组,他们之间的排序就非常简单了。 假设现在有一个数组[32,12,56,78,76,45,36] 从下向上来看,每次排序完后再合并,分而治之。 上代码!!! #include <stdio.h
        阅读全文
                
摘要:关于快速排序,首先我们不展开讲解,我们先给定一组数组[72,6,57,88,60,42,83,73,48,85]对它来进行排序(你只用跟着我思路来就行了,后面你就会慢慢懂快速排序) 首先我们设置一个两个标记点i,j。i标记要排序的数组的首位置,j标记要排序的数组的末位置。然后拿一个X值去记录一下数组
        阅读全文
                
摘要:什么是凸包? 我的理解就是,图形任意两点的连线都没有在图形外部。 问题:给定点集,怎么求出凸包的边界点呢??? 第一步:给这些点按照X的从大到小进行排序,如果X相同的按照Y再排序。 第二步:把X最小的和最大的连起来,他们必为凸包的边界点。 第三步:把平面区域分为两个部分,分别在上面和下面去找面积最大
        阅读全文
                
摘要:背包问题概述:有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 如果按照蛮力法去算的话复杂度会很高,大概是2^n次,因此不会用蛮力法。 在这里可以依据动态规划的思想来做这个。 首先规定i代表第几个物品,j代表体积。Vi代表第i个物品的价值,Wi代表第
        阅读全文
                
摘要:问题:两个软硬程度一样但未知的鸡蛋,它们有可能都在一楼就摔碎,也可能从一百层楼摔下来没事。 有座100层的建筑,要你用这两个鸡蛋确定哪一层是鸡蛋可以安全落下的最高位置。可以摔碎两个鸡蛋。 这道题的关键是如何去确定第一次下落鸡蛋的楼层,如果太小,没有摔碎,而剩余的范围依然很广,如果太大,摔碎了只剩一个
        阅读全文
                
摘要:如果你理解到了冒泡算法的真谛你一眼就会看出这就是一个冒泡算法就能解决。只不过在进行移位操作之前,要先对碟子进行处理,将黑碟子赋值为1,白碟子赋值为0,然后放到数组里面去,进行冒泡排序就可以了。 1.是101010,和相邻比较,然后移位 2.是011010,和相邻位比较会发现,相同因此跳过 3.是01
        阅读全文
                
摘要:选择排序是每次在数组中选一个最小的(最大的)数,放到数组的第一个位置,执行到数组最后一个元素的前一个元素就可以了。 选择排序复杂度为n^2。但是它有个优点就是它交换元素的次数很少。因为它是以一个key值在记录最小值所在的地方,最后才交换。
        阅读全文
                
摘要:冒泡算法的原理是首先每轮比较然后把相邻两个中较大的数向后面传,直到找出最大的那个数送到数组最后面(当然你也可以去找一个最小的数然后传到数组的最后面),注意每次比较完一轮要减小数组的长度,因为你已经把最大的(最小的)数传到数组后面。 可以对冒泡算法进行效率的提升,比如如果比较完一轮都没有进行过项的交换
        阅读全文
                
 
                    
                     
                    
                 
                    
                
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号