【李木华】算法与数据结构概述
来源:互联网 发布:网络舆论的传播分析 编辑:程序博客网 时间:2024/06/07 13:10
【转自】http://blog.csdn.net/Alfa_/article/details/53735814
数据结构与算法概述
- 数据结构的原则
- 一种数据结构就是一类数据的表示及其相关的操作
- 一个算法如果能够在所要求的资源限制内将问题解决好,则称这个算法是有效的。
- 一个资源限制是:可用来存储数据的全部空间——可以分为内存空间限制和磁盘(外存)空间限制——和允许执行每一个子任务所需要的时间。
抽象数据类型和数据结构
- 类型是一组值的集合。
- 数据项(Data Items)是一条信息或者其值属于某个类型的一条记录,数据项也可以说成是数据类型的成员。数据项也可以说成是数据结构的成员。
- 数据类型是指一个类型和定义在这个类型上的一组操作。
- 抽象数据类型(ADT)是指数据结构作为一种软件构成的一种实现。
- 数据结构是抽象数据类型(ADT)的实现。
- 数据项有逻辑形式(Logical Form)和物理形式(Physical Form)两个方面。利用抽象数据类型(ADT)给出的数据项定义是它的逻辑形式,数据结构中对数据项的实现是它的物理形式。
问题、算法和程序
- 问题:从数学角度来看,可以把问题看作函数。函数(function)是输入(即定义域,domain)和输出(即值域,range)之间的一种映射关系。
- 算法:指解决问题的一种方法或者一个过程。
性质: - 正确性:包括有效性(soundness)和完备性(completeness)。它必须完成所需要的功能,把每一次输入转化为正确的输出。
- 具体步骤:一个算法应该由一系列具体步骤组成。
- 确定性:下一步应执行的步骤必须明确。
- 有限性:一个算法必须由有限步组成。
- 可终止行:算法必须可以终止,即不能进入死循环。
- 程序:一个计算机程序被认为是使用某种程序设计语言对一个算法的具体实现。
- 总结:问题是一个函数,或者是从输入到输出的一个映射。算法是一个能够解决问题的、有具体步骤的方法。
算法分析
概述
判断算法性能的一个基本考虑是处理一定“规模”的输入时该算法所需要执行的“基本操作”数。“规模”一般指输入量的数目。一个“基本操作”必须具备这样的性质:完成该操作所需时间和操作数的具体取值无关。
算法的增长率是指当输入的值增加时,算法代价的增长速率。
最佳、最差和平均情况
对于某些算法,即使问题规模相同,如果输入数据不同,其时间开销也不同。
渐近分析
上限(最小上限):“增长率的上线为f(n)”成为大O表示法(big Oh notation),读作“大欧”表示法。如果某个算法的增长率上线(在最差情况下)时f(n),那么就说这个算法“最差情况下在集合O(f(n))中”,或者直接说“最差情况在O(f(n))中”。
下限(最大下限):算法的下限用符号Ω来表示,读作“大欧米伽”。若存在两个正常数c和n0,对于n> n0,有T(n)≥cg(n),则称T(n)在集合Ω(g(n))中。
Θ表示法:如果一个算法既在O(h(n))中,又在Ω(h(n))中,则称其为Θ(h(n))。
明确:
最佳、最差或平均情况给出了明确的实例,可以应用在问题中,以得到代价的衡量值。上限和下限则描述了这种代价的增长率。所以定义一个算法或问题的增长率时,需要确定衡量指标(最佳、最差、平均情况),以及对代价增长率的描述(O, Ω , Θ)。
时间复杂度的估计
对于一般的算法,我们可以看看for循环做一个简单的乘法,计算循环次数即可。对于比较复杂的问题,就需要一点数学知识,概率论知识来辅助分析了。
Copyright© by 李木华
Judge by 寒江雪
Date:2016.12.20
0 0
- 【李木华】算法与数据结构概述
- 数据结构与算法概述
- 算法与数据结构概述
- 数据结构与算法概述
- 数据结构与算法概述
- 数据结构与算法概述
- 数据结构与算法概述
- 数据结构与算法概述
- 数据结构与算法--排序概述
- Java数据结构与算法--算法的概述
- 数据结构与算法概述及算法分析
- java数据结构与算法之概述
- 讲座总结(数据结构与算法概述)
- (一)数据结构与算法概述
- 数据结构与算法 基础概述 入门必备!
- 数据结构与算法知识点整理(一)数据结构概述
- Java数据结构与算法--对数据结构的概述
- 数据结构算法概述-转
- LeetCode 122. Best Time to Buy and Sell Stock II
- Golang官方如何支持加载动态库
- SSL JudgeOnline 1455——电子老鼠闯迷宫
- 简单ajax坑我好几次
- [编程题]蛇形矩阵
- 【李木华】算法与数据结构概述
- 数组和链表的区别
- C# 泛型类型参数的约束
- java for语句案例
- 【数据库开发】在Windows上利用C++开发MySQL的初步
- 使用 Image.SCALE_SMOOTH算法进行图片压缩
- Unity5.x 之 Time详解
- alibaba.fastjson.JSON
- 算法 -- iOS开发用Objective_C / Swift3.0实现:快速排序 / 冒泡排序 / 选择排序