- 博客(14)
- 资源 (1)
- 收藏
- 关注
原创 动态规划--钢条切割问题
动态规划法(dynamic programming),这里的programming不是编程的意思,而是一种表格法 不同于前面的分治法,是把问题分成若干互不相交的小问题,递归的解决这些问题,然后合并解决大问题,当各个小问题是重叠的时,分治法会做很多重复的计算,会反复求解公共子问题,而动态规划会把公共子问题只求解一次,保存在表格(数组)里,从而避免了重复计算。 动态规划通常会求解最优化问题,最优解可
2016-07-31 21:11:29 2381
原创 分治法解决选择问题——找出第i小的元素
给出一组数据,返回第i小的元素,最常规的思路是遍历找,或者排好序之后返回等,这里介绍用分治法解决,用到之前快排里的一个函数partition,为了把数组分成两部分,A[p,q-1]的元素都小于主元q, A[q+1,r]的元素都大于q, 所以只要比较i这个位置要落在哪一边就好了 伪代码如下:int Select(int *A, int p, int r, int i)//对数组A[p,r]返回第i小
2016-07-30 16:21:11 4993
原创 Android开发环境的搭建遇到的问题和解决
Android开发环境搭建的特别心累,这里分享一下,希望能帮助到其他人QAQAndroid主要是由Java来写的,所以,首先得有java的开发环境。这里是用eclipse。 (当然,在安装eclipse之前应该已经下载了jdk并且配置好路径了,这个我根据网上的教程没什么大问题就完成了)常规来讲,在官网上下载安装就好了https://eclipse.org/downloads/一开始的时候我
2016-07-28 21:10:59 996
原创 线性时间排序之计数排序,基数排序和桶排序
前面几篇文章已经介绍了几种能在O(nlgn)时间内排序n个数的算法,归并排序和堆排序达到了最坏情况下的上界(渐进最优); 快排在平均情况下达到下界; 但是这些算法都有一点:在排序的最终结果中,各元素的次序依赖与它们之间的比较, 所以称为比较排序, 这一篇介绍三种线性时间复杂度的算法,排序不依赖与比较:计数排序,基数排序和桶排序计数排序 假设n个输入元素中每个都是在0-k这个区间的, k 是一个
2016-07-26 14:56:27 413
原创 快速排序
快排的特性: 快排的最坏情况时间复杂度为Θ(n2),虽然最坏情况时间复杂度很差,但是快速排序通常是实际应用排序中最好的选择,因为其平均性能非常好,期望时间复杂度是Θ(nlgn),而且隐含的常数非常小; 快速排序是原址排序,在虚存环境中也能很好的工作; 快速排序不稳定基本思想: 分治思想; 分解:数组A[p..r]被分解成两个(其一可能为空)子数组A[p..q-
2016-07-26 13:46:30 274
原创 堆排序
堆排序是一种不稳定的,时间复杂度为O(nlogn)的排序方式; 在了解堆排序之前,应该先来了解一下堆: 二叉堆通常以数组的形式表示,可以被看成一个近似的完全二叉树,最后一行未必填满;A.length 表示数组的长度, A.heap_size表示数组中有多少个堆元素,所以 A.heap_size<=A.length; 树的根节点是A[1]; 给定一个结点的下标 i,可以方便的知道其父节点和左右孩
2016-07-24 12:16:24 289
原创 自学Java第一篇
首先想说的是我虽然是个小白,但是多少有点c++ 和c的基础,所以自学java的时候就没有搞得那么详细,因为大量的东西跟c++是比较像的,这里是今天的学习笔记,重点是一些跟c++不一样的地方。 前面还有一篇从知乎上找到的很长很详细的专门论述c++ 与JAVA不同的文章,感兴趣的可以看下1、main函数的写法:java是完全面向对象的,由一个一个类组成,在每一个类里可以写主函数,跟c的mai
2016-07-23 18:27:08 315
原创 随机排列数组
很多算法通过给定的输入变换排列以使输入随机化。 一个方法是为数组的每一个值A[i]附加一个随机的优先级p[i]: 伪代码如下:n = A.length;new array P[n+1];for(int i = 0;i<n;i++){ p[i] = random(1,n3);}sort A by P[i]另一种方法可以在原址上进行随机化 伪代码如下:n = A.length;
2016-07-23 17:39:25 394
转载 java和c++的不同
以下内容来自知乎:c++语言与java语言的区别有哪些?答案是知乎用户 答的,也不知道答主同不同意我用在博客里,主要是为了自己以后看起来方便qaq作者:明三秋链接:https://www.zhihu.com/question/22928284/answer/23095995来源:知乎著作权归作者所有,转载请联系作者获得授权。一、C++有而Java没有的特性
2016-07-19 21:58:58 481
原创 递归求解
这是网易公开课麻省理工学院算法导论的笔记,主要讲了几种渐进符号, O, Θ,o, ω,Ω的意义。这里重点想分享的是递归算法的听课笔记。递归算法常见三种算法:代换法,递归树算法和主定理1、代换法(substitutionmethod): 主要分为三个步骤:1) 猜测形式。并不需要很确切,只要大致是上界就可以,系数之类只用常数c代替就可以2) 带入求证。把猜测的形式
2016-07-19 21:47:40 553
原创 分治法 归并排序 加上逆序数求法
分治法: 字面意义就是分而治之,把大的问题分成小的相似的子问题,递归的解决掉小问题,最终合起来解决大问题 分治法在每层递归时都有三个步骤: 分解原问题为若干子问题,这些子问题都是原问题的规模较小的实例; 解决这些子问题(递归) 合并这些子问题的解分治法的一个应用就是归并排序,是一种稳定的快速的排序,(Θ(n*logn)) 分解: 待排序的n为 n/2 n/2两组 解决: 归并排序递归的
2016-07-18 22:26:02 857
原创 插入排序及算法分析
**插入排序**是一种很重要的排序方式,包括直接插入排序,二分插入排序,希尔排序等,这里 以直接插入排序(不稳定)为例研究算法分析。**直接插入排序**最经典的引入就是扑克牌,所谓插入就是拿着当前牌(第j张),插入到前j-1张牌中,使这j张牌仍然有序,所以伪代码是这样的(n张牌, 储存在数组A[n+1]中)://扑克牌假定从1到n,第一张显然已经有序,当然插入的牌也有可能插到当前第一张牌之前,也就
2016-07-18 21:46:27 612
原创 暑假专项
虽然flag立了难免有被拔的一天,但是还是要勇敢的立。没错,我就是来立flag的,开这个博客是想暑假自学算法,做一些算法竞赛的题目,自学安卓应用开发,并且把学习笔记分享出来,希望自己每天都能收获一些知识,珍爱生命,远离咸鱼一样的暑假。今天,先看了大黑书算法导论的第一章算法在计算中的应用,一句话来讲就是算法很重要,你要好好学,不要嫌书厚……算法就是任何良定义的计算过程
2016-07-17 18:34:43 366
微信小程序 在线电子书商城+阅读
2018-03-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人