| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法和数据结构解析:1-算法简介 -> 正文阅读 |
|
[数据结构与算法]算法和数据结构解析:1-算法简介 |
1.算法的基本概念算法(Algorithm),就是“计算方法”,指解决一个问题具体的步骤和方法。 算法是计算机程序的核心。在一个计算机程序中,有两个非常重要的部分:数据结构和算法。数据结构决定了程序中数据组织和存储的形式,而算法决定了程序的功能和效率。算法在具体应用时,与数据结构密不可分,是一个程序的灵魂。 2.算法的特征一个算法应具有一下五个重要特征:
算法的有穷性,是指算法必须能在执行有限个步骤之后终止。
算法的每一步骤必须有确切的定义。
一个算法有0个或多个输入,以刻画运算对象的初始情况。所谓0个输入,是指算法本身定出了初始条件。
一个算法有一个或多个输出,以反映对输入数据加工后的结果。
算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步骤,即每个计算步骤都可以在有限时间内完成(也称之为有效性)。 3.算法复杂度3.1 算法复杂度基于算法的有穷性,我们可以知道算法运行消耗的时间不能是无限的。而对于一个问题的处理,可能有多个不同的算法,它们消耗的时间一般是不同的;运行过程中占用的空间资源也是不同的。 这就涉及到对算法的性能考察。主要有两方面:时间和空间。在计算机算法理论中,用时间复杂度和空间复杂度来分别从这两方面衡量算法的性能。 3.2 时间复杂度(Time Complexity)算法的时间复杂度,是指执行算法所需要的计算工作量。 一般来说,计算机算法是问题规模n 的函数f(n),算法的时间复杂度也因此记做:T(n)=Ο(f(n))。 问题的规模n 越大,算法执行的时间的增长率与f(n) 的增长率正相关,称作渐进时间复杂度(Asymptotic Time Complexity)。 3.3 空间复杂度算法的空间复杂度,是指算法需要消耗的内存空间。有时候做递归调用,还需要考虑调用栈所占用的空间。 其计算和表示方法与时间复杂度类似,一般都用复杂度的渐近性来表示。同时间复杂度相比,空间复杂度的分析要简单得多。 所以,我们一般对程序复杂度的分析,重点都会放在时间复杂度上。 3.4 时间复杂度的计算代码的执行时间,可以用“基本指令”的数量来表示。计算机系统里,基本指令包括:算术指令(加减乘除、取余、向上向下取整)、数据移动指令(装载、存储、赋值)、控制指令(条件或无条件跳转,子程序调用和返回)。 查看一些具体的代码,分析一下它们的时间复杂度:
3.5 复杂度的大O表示法不同的算法,运行时间随着输入规模 n 的增长速度是不同的。我们可以把执行时间,表示成输入规模 n 的函数 T(n) 。 在算法分析中,一般用大O符号来表示函数的渐进上界。对于给定的函数g(n),我们用O(g(n))来表示以下函数的集合: O(g(n)) = { f(n): 存在正常量 c 和 n0,使对所有 n≥n0 ,有 0≤f(n) ≤ cg(n) } 这表示,当数据量达到一定程度时,g(n) 的增长速度不会超过 O(g(n))限定的范围。也就是说,大O表示了函数的“阶数”,阶数越高,增长趋势越大,后期增长越快。 下图画出了常见的算法复杂度: ????? O(1),O(log(n)),O(√n),O(n),O(nlog(n)),O(n2),O(e2). 3.6 空间复杂度的计算定义:算法执行所占用的空间。
有时候递归调用,需要计算调用栈所占用的空间。 4. 算法的分类算法的分类有以下两种原则:
????? 4.1 分治算法(1)分而治之:
(2)分治和递归:
(3)基本步骤
(4)应用场景
4.2 贪心算法(1)定义 贪心(Greedy) —— 总是做出在当前看来是最好的选择。不从整体考虑,只考虑眼前,得到 局部最优解。 (2)局部最优解和全局最优解 要保证最终得到的是全局最优解,贪心策略必须具备 无后效性(前面做的影响对后面没影响)。 (3)适用场景
(4)具体实现框架
4.3 动态规划(1)动态决策的过程
(2)最优化问题
(3)动态规划的过程 在求解过程的的时候,中间会经历很多的阶段,然后每一个阶段,后面阶段需要计算的结果和状态可能需要依赖之前的状态和决策。比如前面做了决策1,不同的决策1会导致后面会采取不同的决策2;比如当决策1 的结果是最优的,但是基于决策1的结果的决策2的结果很少或者不是最优的。所以,需要综合决策1和决策2来的得到具有最优值的结果。 (3) 应用场景 最优二叉搜索树、最长公共子序列、背包问题等等。 4.4 回溯法(1)选优搜索法
(2)深度优先搜索(DFS)策略 在包含问题所有解的解空间树中,按照深度优先搜索的策略,从根节点出发,深度搜索解空间树;回溯法就是对隐式图的深度有限搜索算法。 4.5 分支限界法(1)广度有限搜索(BFS)策略
(2)限界策略
4.6 比较
5. 经典算法在实际应用中,有一些经典算法和策略,都可以作为解决问题的思路:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 1:54:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |