算法与数据结构
菜鸟程序小猿
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
算法简介
为什么学习算法? (1)什么比性能更重要?正确性,简洁,可维护性,成本开销,功能性,模块化,安全,可扩展性,用户体验等。 (2)如果算法和性能不重要,为啥关注呢?为什么学习?性能与体验关联,实时性,性能是其他的基础,性能就像货币,你用java来代替c,损失三倍性能,为的是其他方面的优越性,比如对象化,exception机制等。 排序问题 (1)插入排序(In转载 2014-01-13 12:57:34 · 659 阅读 · 1 评论 -
堆与堆排序
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。二叉堆的定义二叉堆是完全二叉树或者是近似完全二叉树。二叉堆满足二个特性:1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。当父结点的键值总转载 2014-01-20 13:11:24 · 544 阅读 · 0 评论 -
链表、堆栈、队列的区别
数据结构知识:链表,队列和栈的区别 数组,栈,队列,链表,二叉树,哈希表,图 都是数据结构,而数组,链表一般为其他数据结构的表现形式链表,队列和栈都是数据结构的一种。Sartaj Sahni 在他的《数据结构、算法与应用》一书中称:“数据结构是数据对象,以及存在于该对象的实例和组成实例的数据元素之间的各种联系。这些联系可以通过定义相关的函数来给出。”他将数据对象(d转载 2014-01-28 09:48:47 · 1452 阅读 · 0 评论 -
轻松搞定面试中的二叉树题目
版权所有,转载请注明出处,谢谢!http://blog.youkuaiyun.com/walkinginthewind/article/details/7518888树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树转载 2014-01-28 12:11:59 · 508 阅读 · 0 评论 -
二叉搜索树
一、介绍二叉搜索树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树:1,若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;2,若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;3,它的左、右子树也分别为二叉搜索树。二叉搜索树的查找过程和次优二叉树类似,通常采取二叉链表作为二叉搜索序树的存储结构。中序遍历二叉搜索转载 2014-01-28 12:10:03 · 723 阅读 · 0 评论 -
快速排序分析与随机化算法+快速排序的随机化版本
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。该方法的基本思想是:1.先从数列中取出一个数作为基准数。2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。3.再对左右区间重复第二步,直到各区间只有一个数。 虽然快速排序称为分治法,但分转载 2014-01-15 12:19:59 · 907 阅读 · 0 评论 -
C语言常用排序——直接插入,冒泡,选择,希尔,快速,堆排序
/* ============================================================================= 相关知识介绍(所有定义只为帮助读者理解相关概念,并非严格定义): 1、稳定排序和非稳定排序 简单地说就是所有相等的数经过某种排序方法后,仍能保持它们在排序之前的相对次序,我们就 说这种排序方法是稳定的。反之,就是非稳定的转载 2014-01-12 20:20:58 · 645 阅读 · 0 评论 -
递归算法——归并排序,快速排序,二分查找
/* * 待排序的数组,算法输入 */ int arrIntegers[10] = { 0, 3, 1, 2, 5, 4, 8, 7, 9, 6 }; /* * 辅助存储空间 */ int tempIntegers[10]; 递归排序:从数组中间划分数组为2个子数组,递归调用归并排序,然后合并(排序过程发生在合并时转载 2014-01-12 21:45:56 · 821 阅读 · 0 评论 -
线性时间排序——计数排序,基数排序,桶排序
线性时间排序即时间复杂度为Θ(n)的排序,主要有计数排序、基数排序和桶排序 以前的排序都涉及到元素比较,称为比较排序,渐近最优的为 随机快速排序,merge sort归并排序和heap sort,时间复杂度为Θ(nlogn) 而这种排序都不是用比较的操作来排序,所以下届Θ(nlogn)对它们不适用原创 2014-01-16 20:58:07 · 703 阅读 · 0 评论 -
分治法
分治法思想: (1)Divide,把问题分解成子问题。 (2)Conquer,循环的解决子问题。 (3)Combine,合并子问题的解得到原问题的解。 归并排序: (1)将长度为n的数组,分解成2个子数组。 (2)循环的对2个子数组进行归并排序。 (3)对排序的子数组进行合并。 T(n)=2*T(n/2转载 2014-01-13 21:12:28 · 615 阅读 · 0 评论 -
strassen矩阵乘法
一般情况下矩阵乘法需要三个for循环,时间复杂度为O(n^3),现在我们将矩阵分块如图:( 来自MIT算法导论 )一般算法需要八次乘法r = a * e + b * g ;s = a * f + b * h ;t = c * e + d * g; u = c * f + d * h;strassen将其变成7次乘法,因为大家都知道乘法比加转载 2014-01-14 11:42:09 · 847 阅读 · 0 评论 -
渐进符号与解递归式
一,渐进符号 (1)O符号,f(n) = O(g(n)),表示f(n)的复杂度最多与g(n)一个数量级,即小于等于。 (2)Ω符号,f(n) = Ω(g(n)),f(n)的复杂度最少与g(n)一个数量级,即大于等于。 (3)o符号,f(n) = o(g(n)),表示f(n)的复杂度要比g(n)的数量级小,即小于。 (4)ω符号,f(n) = ω(g(n)转载 2014-01-13 12:47:07 · 1679 阅读 · 0 评论 -
ADT多项式
#include #include typedef struct node{ float coef; //系数 int expn; //指数 struct node *next; } polynomial; //.....基本操作的函数原型说明...... void Initlist(poly原创 2014-01-30 09:32:14 · 1512 阅读 · 0 评论
分享