算法、数据结构
来去之迹
来去之间,留下一点痕迹
展开
-
时间复杂度
总结整理网上的文章时间复杂度的定义 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号),简称时间复杂度。根据定义,可以归原创 2012-10-09 15:02:48 · 664 阅读 · 1 评论 -
数据曲线拟合,数据趋势判断
最近在弄一些数据趋势判断该方面的东西,下面代码是网友使用最小二乘法做的数据拟合算法的java实现public class PolyFitForcast { public PolyFitForcast() { } /** * * 函数功能:最小二乘法曲线拟合 * * * 方程:Y = a(0) + a(1) * (X - X1)+ a(2) * (X - X1)原创 2012-11-28 17:11:42 · 14417 阅读 · 0 评论 -
插入排序
快速排序是一种常用的排序方法,但是适合少量数据,一般是在30条以内最好。下面是代码public class Sort { /** * 插入排序相当于打牌时候整理牌的过程。开始摸牌时,左手是空的,牌面朝下放桌子上。 * 接着我们从桌子上摸起一张牌,并将它插入到左手一把牌的正确位置中,为了找到这张牌应该放的正确位置。 * 我们需要将这张牌和左手里已有的牌,从右到左逐一比较。无论什么原创 2012-12-24 10:50:59 · 335 阅读 · 0 评论 -
分治法(归并排序,X^n以及斐波那契数列)
分治法是解决问题的一种很好的思路,下面通过三种算法来了解分治法public class DivideMethod { /** * 归并排序:归并算法的中心是归并两个已经有序的数组,并且递归调用归并操作。 优点和缺点:比简单排序在速度上快很多;归并排序会占用双倍的存储空间。 * 效率:归并排序的时间复杂度是 O(N*LogN);简单排序的复杂度是O(N2)。 每一趟归并的时间复杂度为原创 2012-12-24 11:36:24 · 1244 阅读 · 0 评论 -
算法导论:快速排序
快速排序的原理:1.选取一个元素q,术语叫做主元 2.循环数组a,将数组分割成 a[p...q-1] 和 a[q+1....r]两部分,中间位置即选取主元q排序后的的位置。 3.循环迭代被分隔的数组即a[p...q-1] 和 a[q+1...r] 继续重复1,2步骤,这样数组就变成一个有序的数组。 伪代码如下:原创 2013-12-27 11:05:19 · 616 阅读 · 0 评论 -
算法导论:堆排序的应用---优先级队列
下面代码为优先级队列的java实行public class PriorityQueue { private int capacity = 16; private int [] quene= new int[capacity]; private int heapsize = 0; /** * 返回最大值 * @return */ public int maximum()原创 2013-12-25 16:42:06 · 633 阅读 · 0 评论 -
算法导论:堆排序
堆实际是一种数组,它可以被视为一种完全二叉树,可以递归二叉树来进行排序,某个节点i的父节点(i/2)以及左儿子(2i)、右儿子(2i+1)节点可以很容易的计算出来, 因为堆是一个完全二叉树,所以堆的很多操作与树的高度成(logn)正比,堆排序的运行时间为O(nlogn),堆排序是不同于插入排序,堆排序是一种原地排序。下面代码是堆排序的java实现public class HeapSor原创 2013-12-25 16:38:31 · 535 阅读 · 0 评论 -
从B 树、B+ 树、B* 树谈到R 树(转)
作者:July、weedge、Frankie。编程艺术室出品。说明:本文从B树开始谈起,然后论述B+树、B*树,最后谈到R 树。其中B树、B+树及B*树部分由weedge完成,R 树部分由Frankie完成,全文最终由July统稿修订完成。出处:http://blog.csdn.net/v_JULY_v 第一节、B树、B+树、B*树1.前言:动态查找树主要有:二叉查找树(B转载 2015-03-24 18:41:08 · 608 阅读 · 0 评论