随笔分类 -  Data Structure and Arithmetic

摘要:前言 插入,快速,合并,堆排序等基于比较的排序算法的最坏情况下界为Ω(nlogn),最坏情况下都要进行Ω(nlogn)次比较。假设有一n个元素组成的数组(假设每个元素都不相等),那么一共有n!排列组合,而且这n!排列组合结果都应该在决策树的叶子节点上(如图1),在图1中n = 3,所以有3! = 6种组合全都在决策树的叶子节点,对于高度为h的二叉树,叶子节点的个数最多为2h (当为满二叉树时为2h... 阅读全文
posted @ 2011-07-30 18:44 zabery 阅读(6870) 评论(2) 推荐(0) 编辑
摘要:前言在学习计算机算法时,知道插入排序的时间复杂度是O(n2),那O记号到底是什么意思呢?本文主要介绍几个算法分析时用到的记号。大O记号定义:O(g(n)) = { f(n) : 存在正常数c和n0 ,使对所有的n >= n0,都有 0 <= f(n) <= cg(n) }。大O记号给出函数的渐进上界。, 则可以表示为 f(n) = O(n2)。证明:要使得 0 <= f(n) <= cg(n)存在c = 9/2 ,n0 = 1,使得对所有的n >= n0都有 0 <= f(n) <= cg(n)。O(g(n) 以及后面讲到的记号表示的都是集合,而 阅读全文
posted @ 2011-07-19 20:13 zabery 阅读(6523) 评论(1) 推荐(2) 编辑
摘要:首先什么是算法?想想自己写过的算法,简单一点的,冒泡排序,插入排序等等。回忆一下,输入乱序的集合(当然要确保输入的规范性,不能造成溢出,或者其他异常),然后经过传参给函数BubbleSort,最后输出一个排好序的集合;貌似这样就完了,但是要注意的是,在有限的时间内输入合乎要求的输出。 总结归纳一下:对于符合一定规范的输入,在有限时间给出合乎要求的输出。能实现这种要求的函数或过程就是算法。 &#... 阅读全文
posted @ 2010-08-17 21:49 zabery 阅读(1953) 评论(4) 推荐(0) 编辑
摘要:给出一个表达式 2*(3-1),迅雷不及掩耳,立马知道答案为4,但是计算机可没有这样的能耐,它只知道直接计算,却不知道优先级。如此,我们需要自己用代码来告诉它算符的优先级 从左至右 先乘除后加减 先括号内后括号外 先来研究简单的算术表达式,只有+-*/()运算符 算符优先表如上图,其中#为结束标识符。 现在来纠结具体的实现。 主要是来展示表中的内容,返回>,<,=.算术表达式的计算... 阅读全文
posted @ 2010-08-11 20:36 zabery 阅读(5464) 评论(1) 推荐(1) 编辑
摘要:二叉查找树的特点:(1)左边的所有节点都要小于根节点的值(2)右边的所有节点都要不小于根节点的值(3)原树的子树都符合(1)(2)条件。二叉查找树又名二叉排序树,因为只需中序遍历它就可以得到排序的树了,对于二叉排序树的操作主要有:(1)插入:通过插入来初始化树。本文是用链式,而不是存储在数组中。(2)遍历:有三种方法分别为:先序,中序,后序。(3)查找:有三种查找分别为:查找最大值,最小值,与某种... 阅读全文
posted @ 2010-05-05 22:40 zabery 阅读(444) 评论(0) 推荐(0) 编辑