JavaShuo
栏目
标签
数据结构与算法之一
时间 2019-12-14
标签
数据
结构
算法
之一
繁體版
原文
原文链接
基本原理
计算机科学是经过使用计算机解决各类问题的研究领域。
为了使用计算机解决给出的问题,您须要为其设计算法。
可设计多个算法来解决特定的问题。
提供了最大效率的算法应用于解决此问题。
算法的效率可经过使用合适的数据结构来改善。
数据结构帮助建立简单、可重用和易于维护的程序。
本模块容许学员选择并实现合适的数据结构和算法来解决特定
的编程问题。
解决问题时算法和数据结构的做用
问题解决是每一个科学规律的必要部分。
计算机普遍用于解决与各个域有关的问题,例如银行、商业、医疗、制造和
运输。
为了使用计算机解决给出的问题,您须要为其编写程序。
程序由两个组件组成,即算法和数据结构。
算法这个词来源于波斯数学名称
Al-Khowarizmi
。
算法可定义为解决问题的逐步程序。
算法帮助用户在有限的步骤中到达正确的结果。
算法具备
5
个重要的属性:
有限性
明确性
(
肯定目的
)
输入
输出
有效性
只要能够为其编写算法,经过使用计算机能够解决问题。
此外,算法提供了如下好处:
帮助编写对应的程序
帮助区分一系列能够解决的小问题和难以解决的问题
决策制定成为更加理性的过程
使得过程一致和可靠
数据结构的做用
可以使用不一样的算法来解决相同的问题。
一些算法可能比其它算法更有效地解决问题。
应使用提供最大效率的算法来解决问题。
改善算法效率的其中一个基本技巧是使用
适当的数据结构
。
数据结构被定义为在内存中互相组织各个数据元素的方式。
数据能够按许多不一样的方式来组织。所以,您能够建立尽量多的数据结构。
通过多年已经证实颇有用的一些数据结构是:
数据类型也是基本数据结构
.
数组
链表
堆栈
队列
树
图
合适数据结构的使用有助于提升程序的效率。
使用合适的数据结构还容许您克服一些其它编程挑战,如:
简化复杂的问题
建立标准的可重用的代码组件
建立易于理解和维护的程序
数据结构的类型
数据结构可分为如下两类:
静态:
例子
–
数组
动态:
例子
–
连接表
设计算法时两个经常使用的技巧是:
分治法
贪婪法
分治法是解决概念性困难问题的强大方法。
分治法须要你找出一个方法:
将问题细分为子问题
解决微不足道的用例
组合到子问题的解决方案以解决原始问题
基于贪婪法的算法用于解决优化问题,其中您须要在给定的条件集合中最大
化利润或最小化成本。
优化问题的一些示例包括:
找出从始发城市到一组目标城市的最短距离,给出两个城市之间的距离。
找出某个金额所需的货币票据的最小数值,其中有每一个命名的任意票据数。
从给出的项集合中选择具备最大值的项,其中所选项的总重量不能超过给出的值。
递归:
递归指的是按照自己定义过程的技巧
用于解决原本重复的复杂编程问题
经过使用递归程序或函数,递归能够在程序中实现。递归程序或函数是调用自己
的函数。
递归的主要好处是可用于编写清晰、简短和简单的程序
最简单的一个小例子:从前有座山,山里有个老和尚,
….
课间思考
明确在尝试找出前面
n
个天然数之和的如下算法中的问题:
算法:
Sum (n)
1. s = n + Sum(n
–
1)
2. Return (s)
答案:
在给出的递归算法中没有结束条件。所以,能够无限调用自身。正确的算法为:
1.
If (n = 1)
Return(1)
2. s = n + Sum(n – 1)
3. Return(s)
肯定算法的效率
影响程序效率的因素包括:
机器速度
编译器
操做系统
编程语言
输入大小
除了这些因素,程序的方式数据被组织且用于解决此问题的算法还对程序的
效率具备重大影响。
经过肯定消耗的资源量,能够计算算法的效率。
算法消耗的主要资源是:
时间:
执行算法所需的
CPU
时间。
空间:
执行算法时所用的内存量。
算法使用的资源越少,效率越高。
时间
/
空间权衡
:
指的是您能够在程序执行速度较慢时能够减小使用的内存或在使用内存的成本很
高时减小运行的时间。
能够应用时间
/
空间权衡的情形示例为数据存储。
内存是可扩展的,但时间却不能够。所以,
一般考虑
时间
要比考虑内存的情
况多。
为了测量算法的时间效率,您能够根据算法编写程序,执行程序并测量运行
程序所需的时间。
您按这种方式测量的执行时间将取决于大量因素,例如:
机器的速度
编译器
操做系统
编程语言
输入数据
可是,您要肯定执行时间是如何受算法的性质影响的。
算法的运行时间直接与算法中涉及的关键比较成比例,而且它是
n
的函数,
其中
n
是输入数据的大小。
算法的
运行时间
随着输入
数据量的增长而增长
的
速率
称为算法增加的阶。
算法
增加的阶
使用
大
O
符
号来定义。
大
O
符号已经接受为说明算法效率的基础技巧。
增加的阶与其对应的大
O
符号之间的不一样是:
常量
- O(1)
对数
- O(log n)
线性
- O(n)
重对数
- O(n log n)
二次方程
- O(n
2
)
立方
- O(n
3
)
指数
- O(2
n
), O(10
n
)
根据增加阶,大
O
符号可按照递增阶的方式排列:
O(1) < O(log n) < O(n) < O(n log n) < O(n
2
) < O(n
3
) < O(2
n
)
< O(10
n
)
分组讨论:所选算法的效率依赖性
问题描述:
您须要编写算法以搜索字典中给定的单词。讨论组织致电数据的不一样算法和不
同方式如何影响进程的效率。
小结
在本章中,你已经学到:
算法可定义为解决问题的逐步程序,在有限的步骤内产生正确的结果。
算法具备
5
个重要的属性:
有限性
明确性
输入
输出
有效性
提供了最大效率的算法应用于解决此问题。
数据结构可分为如下两类:
静态
动态
设计算法时两个经常使用的技巧是:
分治法
贪婪法
递归指的是按照自己定义过程的技巧。用于解决原本重复的复杂编程问题。
算法消耗的主要资源是:
时间:执行算法所需的
CPU
时间。
空间:
执行算法所用的内存量。
时间
/
空间权衡指的是您能够为了减慢程序执行的速度而减少内存的使用量,或
在减小运行时间的同时提升使用的内存。
算法的总运行时间直接与算法中涉及的比较次数成比例。
算法增加的阶使用大
O
符号来定义。
相关文章
1.
算法与数据结构之一
2.
【数据结构与算法】之一什么是数据结构
3.
算法与数据结构总结(一)
4.
数据结构与算法一一图
5.
数据结构与算法(一)—— 数组
6.
数据结构与算法第一节:数据结构与算法的关系
7.
数据结构与算法学习笔记之--数据结构
8.
JS之数据结构与算法 (5)
9.
数据结构与算法之树(二)
10.
数据结构与算法之概述
更多相关文章...
•
Rust 结构体
-
RUST 教程
•
XML 树结构
-
XML 教程
•
算法总结-回溯法
•
算法总结-广度优先算法
相关标签/搜索
算法与数据结构
数据结构与算法
数据结构与算法之美
数据结构和算法
算法和数据结构
数据结构算法
数据结构
数据结构与算法04
重学数据结构与算法(JS)
数据结构与算法系列
Redis教程
MySQL教程
PHP 7 新特性
算法
数据传输
数据库
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
Excel教程:排序-筛选-切片-插入表格
2.
ZigBee ProfileID,DeviceID,ClusterID
3.
二维码背后不能不说的秘密Part1~
4.
基于迅为i.MX6平台 | 智能家居远程监控系统
5.
【入门篇】ESP8266直连智能音箱(天猫精灵)控制智能灯
6.
MongoDB安装问题
7.
【建议收藏】22个适合程序员多逛逛的网站
8.
【建议收藏】10个适合程序员逛的在线社区
9.
Attention-Based SeriesNet论文读后感
10.
Flutter中ListView复用原理探索
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
算法与数据结构之一
2.
【数据结构与算法】之一什么是数据结构
3.
算法与数据结构总结(一)
4.
数据结构与算法一一图
5.
数据结构与算法(一)—— 数组
6.
数据结构与算法第一节:数据结构与算法的关系
7.
数据结构与算法学习笔记之--数据结构
8.
JS之数据结构与算法 (5)
9.
数据结构与算法之树(二)
10.
数据结构与算法之概述
>>更多相关文章<<