
算法
u013344815
这个作者很懒,什么都没留下…
展开
-
堆排序算法剖析(基于Java)
什么是堆结构? 堆排序的关键是构造堆结构,首先谈一下堆结构的定义,堆结构是一种树结构,准确地说是一个完全二叉树,完全二叉树的定义在这里就不多赘述了,百度知道。 按照排序顺序,堆结构可以分为两种: 1.按照从小到大的顺序排序,要求非叶节点的数据要大于或等于其左、右子节点的数据。 2.按照从大到小的顺序排序,要求非叶节点的数据要小于或等于其左、右子节点的数据。 本文以从小到大的顺序为例进行介原创 2015-10-11 20:35:30 · 689 阅读 · 1 评论 -
算法基础--大O函数
原创 2016-02-27 11:02:07 · 1495 阅读 · 0 评论 -
快速排序算法剖析
快速排序算法和冒泡排序算法类似,都是基于交换排序的思想。快速排序算法对冒泡排序算法进行了改进,从而具有更高的执行效率。通过程序来讨论基于数组的快速排序算法是最简单粗暴的。原创 2016-02-29 18:26:38 · 452 阅读 · 0 评论 -
时间复杂度与空间复杂度计算
算法的时间复杂度和空间复杂度合称为算法的复杂度。1.时间复杂度(1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频转载 2016-11-06 15:09:38 · 445 阅读 · 0 评论 -
链表算法题小结
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。由于不必须按顺序存储,链表在插入的时候可以达到O(1)的复杂度,比另一种线性表顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)原创 2016-11-06 16:07:36 · 471 阅读 · 0 评论 -
二叉树遍历(Java)---前序遍历,中序遍历,后序遍历
什么是遍历二叉树?遍历二叉树指的是按某种规律依次访问二叉树的每个节点,对二叉树的遍历过程就是将非线性结构的二叉树中的节点排列成线性序列的过程。遍历二叉树有哪几种方法?如果采用链表来保存二叉树的节点,则有以下两种遍历方式。 深度优先遍历:这种遍历算法将先访问到树中最深层次的节点。 广度优先遍历:这种遍历算法将逐层访问每层的节点,广度优先遍历又被称为按层遍历。 对于深度优先原创 2015-10-19 11:28:36 · 1183 阅读 · 0 评论 -
快速排序算法——以数组最后一个元素为主元
关于快速排序的认识及其基本特征,请参寻我的另外一篇博文快速排序——以数组第一个元素为主元以具体的例子原创 2016-11-22 21:14:44 · 4384 阅读 · 1 评论 -
A*带你踏上快车道
A*(A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法,也是许多其他问题的常用启发式算法。公式表示为: f(n)=g(n)+h(n),其中 f(n) 是从初始节点经由节点n到目标节点的代价估计,g(n) 是在节点空间中从初始节点到节点n的实际代价,h(n) 是从节点n到目标节点的最佳路径的估计代价。帮助理解A*算法的文章:A*算法原理原创 2016-11-28 12:01:00 · 446 阅读 · 0 评论 -
归并排序
归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,归并排序将两个已排序的表合并成一个表。归并排序的操作核心是递归分割而后逐步合并,看下图假设待排数组为{14,12,15,13,11,16}1.分割的过程是要将数组逐层分成单个数字(单个数字构成的数组一定是有序的)2.合并前首先要新建一个数组,用来存放合并并原创 2017-02-28 12:25:04 · 308 阅读 · 0 评论 -
关于字符串处理的经典问题
串的处理在实际的开发工作中,对字符串的处理是最常见的编程任务。本题目即是要求程序对用户输入的串进行处理。具体规则如下:1. 把每个单词的首字母变为大写。2. 把数字与字母之间用下划线字符(_)分开,使得更清晰3. 把单词中间有多个空格的调整为1个空格。原创 2016-03-18 11:11:40 · 917 阅读 · 0 评论 -
分解质因数
在初等数论中,任何一个合数都可以写成几个质数相乘的形式,这几个质数都叫做这个合数的质因数,例如,24=2*2*2*3.分解质因数就是把一个合数写成几个质数相乘的形式。对于一个质数,它的质因数可以定义为它本身。package 分解质因式;import java.util.Scanner;public class Example { //定义方法isSushu(),判断参数n是否为质数原创 2015-12-24 14:29:46 · 1959 阅读 · 0 评论 -
冒泡排序算法及其简单优化(基于Java)
冒泡排序算法通过多次比较和交换来实现排序,其流程如下: (1)对数组中的各数据,依次比较相邻两个元素的大小。 (2)如果前面的数据大于后面的数据,就交换这两个数据。通过第一轮的多次比较排序后,便可将最小的数据排好。 (3)再用同样的方法把剩下的数据逐个进行比较,最后便可按照从小到大的顺序排好数组的各数据。所谓“冒泡”,就是大数沉下去(数组的底部),小数相应的浮上来(数组的顶部)。 下原创 2015-10-27 16:08:32 · 744 阅读 · 0 评论 -
选择排序算法(基于Java)
流程选择排序算法通过选择和交换来实现排序,其排序流程如下: (1)首先从原始数据中选择最小的1个数据,将其和位于第1个位置的数据交换 (2)接着从剩下的n-1个数据中选择次小的1个数据,将其和第2个位置的数据交换。 (3)然后不断重复上述过程,直到最后两个数据完成交换。至此,便完成了对原始数据的从小到大排序。算法分析(1)从数组中选择一个最小的,需要一个for循环遍历数组 (2)将第一步中获原创 2015-10-30 21:53:09 · 471 阅读 · 0 评论 -
判断闰年
闰年是一个比较简单而又经典的数学问题。判断闰年的算法也是很简单的,一个基本规则就是:四年一闰,百年不闰,四百年再闰具体点说就是闰年是能够被4整除,但不能被100整除,有一点例外是可以被400整除的年份。代码如下:代码实现的是输出21世纪的所有闰年package 判断闰年;public class Example { public static void main(Stri原创 2015-12-11 20:32:44 · 550 阅读 · 0 评论 -
算法实现计算一维多项式的值
计算多项式 p(x)=a(n-1)x(n-1)+a(n-2)x(n-2)+.....a1x+a0;在指定点x处的函数值。算法:将多项式表述成如下嵌套的方式:p(x)=(...((a(n-1)+a(n-2))x+a(n-3))x+....a1)x+a0;package 多项式求解;import java.util.*;public class Example {原创 2015-12-11 21:25:07 · 810 阅读 · 0 评论 -
Java实现计算圆周率π的两种方法
π≈3*2^n*y_n其中,n代表割圆次数,y_n代表圆中内嵌正6*n边形的边长原创 2015-12-12 15:24:02 · 55565 阅读 · 0 评论 -
约瑟夫环问题求解--程序+详细注解
约瑟夫环问题起源于一个犹太故事。约瑟夫环问题的大意如下罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫。这41个人中,包括历史学家约瑟夫和他的一个朋友。剩余的39个人为了表示不向罗马人屈服,决定集体自杀。大家决定了一个自杀方案,所有这41个人围成一个圆圈,由第1个人开始顺时针报数,每报数为3的人就立刻自杀,然后再由下一个人继续报数,仍然是每报数为3的人就立刻自杀……,直到所有人都自杀原创 2015-12-08 16:52:58 · 9328 阅读 · 2 评论 -
非递归实现二叉树遍历(思路+代码)
package 非递归遍历二叉树;import java.util.*; //导入含有集合框架的包public class Example { static int SIZE=10; //设定数组大小 /* * 构建createArray方法生成大小为SIZE的随机数组 * Math。random()方法返回带正号的 double 值,该值大于等于 0.0 且小于 1.0。原创 2015-12-06 16:43:00 · 622 阅读 · 0 评论 -
有趣的回文素数
什么是回文素数?回文素数即从左向右读与从右向左读是完全一样的素数,典型的回文素数如下:11,101,131,151,181,……。回文素数往往与记数系统的进位值有关。目前,数学家仍无法证明在十进制中是否包含无限多个回文素数。在其他进制中也有回文素数的概念,例如,在二进制中,回文素数包括梅森素数和费马素数。计算回文素数算法package 回文素数;import java.原创 2015-12-23 20:56:37 · 995 阅读 · 0 评论 -
快速排序算法——以数组第一个元素为主元
快速排序算法的基本特性时间复杂度:O(n*lgn)最坏:O(n^2)空间复杂度:O(n*lgn)不稳定。快速排序是一种排序算法,对包含n个数的输入数组,平均时间为O(nlgn),最坏情况是O(n^2)。通常是用于排序的最佳选择。因为,基于比较的排序,最快也只能达到O(nlgn)。快速排序算法的程序实现(以数组第一个元素为主元)我的另外一篇博客也讨论了快排原创 2016-11-22 15:37:21 · 2485 阅读 · 0 评论