- 博客(15)
- 资源 (8)
- 收藏
- 关注
原创 bfprt算法求最小的k个数
bfprt算法是一种经典的线性时间内求最小的第k个数或者最小的k个数的算法。比如我们要知道销量是前几名商品或者是浏览量最多的前几个网站,我们不需要排序,利用bfprt算法就可以完成。bfprt算法又称快速选择算法,其思想是利用快速排序的划分来确定位置。此算法经典而优雅,值得我们学习。步骤 1.将输入的元素划分为5个元素一组,至多有一组不足5个元素。
2016-01-30 11:59:27 1014
原创 求无序数组之中最小的k个数
在无序数组中国找最小的k个数,一般有以下几种办法: 1.比较排序,然后找最小的k个数,时间复杂度下界为O(nlogn) 2.计数排序,时间复杂度可以做到O(n),但是要看具体的数据情况。也比较费空间。以上做法都是把所有元素的个数排好序,但是我们只需要找到前k个最小的数,不要求所有数据有序。 3.遍历所有数据,找到最小的数。再遍历剩下的数,找第二小的数,如此遍历k次,时间复杂度
2016-01-29 15:56:57 1967
原创 快速排序的优化
注:以下代码参考博客参考博客地址快速排序的期望时间复杂度为O(nlogn),最坏时间复杂度为O(n²)。为了避免出现最坏情况,我们可以对其进行改进。1.哨兵的改进,为了使每次划分的数不致于使两边相差过大,我们可以选择三者取中法选哨兵,即首尾和中间数的中位数来作为哨兵。2.小数据量的改进,递归的快速排序在大概n3.相同数字的改进,在存在大量相同数字的时候快速排序是很慢的,我们采用
2016-01-29 12:33:58 640
原创 非比较排序
基于比较的排序时间复杂度下界以下内容参考自《算法导论》基于比较的排序算法可以用一颗完全二叉树(决策树)来表示,节点表示每一次的比较过程,叶子节点表示最终的排序顺序,叶子节点一共有n!个(n表示数据个数,一共有n!种排列方式)二叉树的高度h就是比较的次数,由二叉树的性质,叶子节点的个数不大于2^h,所以有2^h>=n!;2^h>=n! = n*(n-1)*(n-2)*...*
2016-01-18 20:43:28 986
原创 求连续子数组的最大和
问题描述:给定一个n个元素的整型数组,求出最大的连续子数组的始末位置与最大连续子数组的和。问题分析: 这个问题在网上有很多资料可以参考,可惜大部分资料是不完善或者有错误的,在《算法导论》里面这个问题是用来介绍分治算法的,但是这道题作为常考的面试题,从里面可以学到的东西还是很多的,所以在这里学习一下,有什么问题请多指正。首先我们应该考虑的是边界条件和特殊情况:1.如果
2016-01-17 14:11:17 486
原创 求多项式相加的迭代算法
问题描述:假设有n+2个实数a0,a1,…,an,和x的序列,要对多项式Pn(x)= anxn +an-1xn-1+…+a1x+a0 求值,直接方法是对每一项分别求值,并把每一项求的值累加起来,这种方法十分低效,它需要进行n+(n-1)+…+1=n(n+1)/2次乘法运算和n次加法运算。 通过如下变换我们可以得到另一种算法,即Pn(x)= anxn
2016-01-16 10:36:45 2354
原创 归并排序
归并排序是一种利用分治思想来排序的算法。其核心思想是 不断合并有序数据,直到所有数据有序为止。 这里介绍二路归并,即初始有序长度为1,然后两两归并,如果重复,直到所有元素有序。 二路归并的递归算法比较简洁,但是实用性很差。因为它调用了递归栈,需要额外的空间log2n次,再加上需要与数据等长度的额外数组,所以空间复杂度是o(n),归并算法的时间复杂度是
2016-01-13 14:13:56 352
原创 选择排序
选择排序的核心思想是: 给定一组数据,选出最小(大)的放在合适位置上,然后在剩下的数据中选择最小(大)的不放在合适位置,不断重复这个过程,直到所有的数据都有序。简单选择排序 简单选择排序的操作为:通过n-i次关键字间的比较,从n-i+1个记录中选择关键字最小的记录,并和第i(1。总的比较次数为n(n-1)/2,时间复杂度是o(n^2),原地排序,
2016-01-13 11:32:20 395
原创 交换排序
交换排序的核心思想是: 给定一组数据,两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。 基于交换思想的排序方法有两种,冒泡排序和快速排序。冒泡排序 基于交换的思想其实比较符合人们的认知,冒泡排序就是依次比较两个关键字,如果发现两者的关系是逆序,就交换,第一次两两比较可以得出最大
2016-01-12 22:16:56 601
原创 插入排序
插入排序是一种经典的排序算法,其中心思想就是: 给定一组数据,划分为有序区和无序区,在无序区的元素选出一个插入到有序区,使之仍然有序,重复以上步骤,直到无序区不再有元素为止。直接插入排序 一开始我们认为一个元素就是有序的,直接插入排序就是认为第一个元素有序,然后从第二个元素开始比较,插入到前面,共需比较n-1次,第n次移动的最多次数是n次,总共的移动次
2016-01-12 19:49:26 561
原创 sublime text2对编译无反应的解决办法
今天用sublime text2搭建c/c++的gcc编译环境,无奈按照网上的方法,其它环境都配好了,但是就是ctrl+B编译不了程序。经过多次排查,发现了几个问题。1.配置的问题,就是builder文件写错了,在网上找了很多的代码,试过都不行,然后故意删掉一个大括号,会报错说明如果配置错误,那么程序会报错,不是配置的问题。2.sublime text2原来配置
2016-01-12 13:09:45 5052
原创 Sublime Text2安装Package Control和插件
我们可以使用sublime下载各种好用的插件,前提是先安装package Control.1.安装package Control:在线安装,首先打开 Ctrl + ~,输入如下的代码(确保有网)import urllib2,os; pf='Package Control.sublime-package'; ipp = sublime.installed_packages_path()
2016-01-07 11:45:13 596
原创 Windows环境下使用Sublime text2进行lua的配置
这里需要lua的解释器,如何生成可以参考我的另外一篇博客点击打开链接在官网上下载sublime text2,然后安装。点击工具栏,Tool->Build System->New Build System在新建的脚本文件里输入以下代码{ "cmd": ["lua", "$file"], "file_regex": "^(?:lua:)?[\t ](..
2016-01-07 11:19:21 2438
原创 Cocos在windows7下的配置与apk打包
Cocos极大的方便了我们的开发,我们不需要像以前那样麻烦的创建项目,而是把所有的东西都集中在Cocos平台里面,下面介绍一下如何搭建Cocos开发环境。工具:python3.5,win764位系统,cocosv2.3.3,VS2015注意:1.一下所有安装路径一律不得出现中文字符,否则可能会出错。2.JDK、NDK、SDK、Framework的安装路径电脑的系统环境变量配
2016-01-04 16:04:03 842
原创 堆排序的初步学习
注:以下堆排序的代码借鉴了博客http://blog.csdn.net/morewindows/article/details/6709644/这个排序算法的时间复杂度为O(nlogn),主要是花费在建堆和调整堆上。所以对记录数较少的文件并不值得提倡,但是由于它的最坏时间复杂度是O(nlogn),所以对于记录数较多的文件是比较有效的。堆的概念介绍完全二叉树如果满足每一个父节
2016-01-01 11:19:33 509
Java提取EXCEL图片重命名并改变像素大小
2020-11-16
Java的工具包Jtop.jar
2018-02-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人