算法及算法的评价schrodingercatss

算法是对特定问题求解步骤的一种描述,它是指令的有点序列,其中每一条指令表示一个或多个操作。

有穷性、确定性、可行性、具有输入、具有输出。

通常一个好的算法应该达到以下目标:

1.正确性:算法应当能正确地解决求解问题。

2.可读性:算法应当具有良好的可读性,以助人们理解。

3.健壮性:当输入非法的数据时,算法也能适当的做出反应或进行处理,而不会产生莫名奇妙的输出结果。

回归最初的问题,随着问题的增长,计算成本应该如何增长?这里的我们只关心足够大的问题规模,注重考察成本的增长趋势。

渐进分析:在问题规模足够大后,计算成本增长的分析。

是算法的效率的度量。

时间复杂度:一个语句的频度是指该语句在算法中被重复执行的次数。算法中的所有语句的频度之和记作\(T(n)\),它是该算法问题规模n的函数,时间复杂度主要分析\(T(n)\)的数量级,又因为算法中基本运算(最深层循环内的语句)的频度与\(T(n)\)同数量级,所以通常采用算法中基本运算的频度\(f(n)\)来分析算法的时间复杂度。因此,算法的时间复杂度记为:\(T(n) = O(f(n))\)

\(T(n) = O(f(n)) \quad\) \(iff \quad\) \(∃ \ c > 0\),当 \(n >> 2\)后,有\(T(n) < c*f(n)\)

\(\sqrt{5n*[3n*(n+2) + 4] + 6} < \sqrt{5n * [6n^2 + 4] + 6} < \sqrt{35n^3 + 6} < 6 * n^{1.5} = O(n^{1.5})\)

与\(T(n)\)相比,\(f(n)\)更为简洁,但依然反映着前者的增长趋势。

常系数可忽略:\(O(f(n)) \ = \ O(c*f(n))\)

低次项可忽略:$O(n^a + n^b) = O(n^a) \(, 当\)a > b > 0$

常数(constant function)

\(2 = 2013 = 2013 * 2013 = O(1)\),甚至\(2013^{2013} = O(1)\) //含RAM各基本操作

这类算法效率最高(总不能奢望不劳而获吧)

一定不含循环?

一定不含分支转向?

一定不能有(递归调用)?

**对数\(log(n)\) **

\(lnn\)| $ lgn $| $log_{100}n $| \(log_{2013} n\)

**常底数无所谓 **

\({\forall}\ a,\ b > 0, \ log_an = \ log_ab * \ log_bn = \ Θ(log_bn)\)

**常数次幂无所谓 **

\({\forall}\ c \ > \ 0 ,\ logn^c \ = \ c * logn = Θ(logn)\)

**对数多项式(ploy-log function) **

\(123*log^{321}n \ + \ log^105(n^2 - n + 1) \ =\ Θ(log^{321}n)\)

这类算法非常有效,复杂度无限接近于常数:\({\forall} \ c \ > \ 0, \ logn \ = \ O(n^c)\)

**多项式(ploynomial function) : **

\(100n + 200 = O(n)\)

\((100n - 500)(20n^2 - 300n = 2013) \ = \ O(n * n^2) \ = \ O(n^3)\)

\((2013n^2 -20) / \ (1999n - 1) \ = \ O(n^2/n) \ = O(n)\)

一般地:\(a_kn^k + a_{k-1}n^{k-1} + ... + a_1n + a_0 \ = \ O(n^k), \ a_k > 0\)

线性(linear function):所有\(\ O(n)\)类函数

从\(O(n)\)到\(O(n^2)\):编程算法题的主要覆盖范围

幂:\([(n^{2013} -24n^{2009})^{1/3} + 512n^{567} - 1978n^{123}]^{1/11} \ = \ O(n^{61})\)

**指数(exponential function): **\(T(n) \ = \ a^n\)

\({\forall} \ c \ > \ 1,\ n^c \ = \ O(2^n)\)

\(n^{1000} \ = \ O(1.0000001^n) \ = \ O(2^n)\)

\(1.0000001^n = Ω(n^{1000})\)

这类算法的计算成本增长极快,通常被认为不可忍受。

从\(O(n^c)\)到\(O(2^n)\)是从有效算法到无效算法的分水岭,很多问题\(O(2^n)\)的算法往往显而易见,然后设计出\(O(n^c)\)的算法却极其的不易,甚至,有时候注定是徒劳无功的,我们把这些问题分为NP和非NP问题。

均摊时间复杂度:在代码执行的所有复杂度情况中绝大部分是低级别的复杂度,个别情况是高级别复杂度且发生具有时序关系时,可以将个别高级别复杂度均摊到低级别复杂度上。基本上均摊结果就等于低级别复杂度。

举例:有一个长度为n的数组,如果数组没满,就往里插入一个数,如果数组满了,就遍历求和.那么绝大多数情况下都是\(O(1)\),只有最后一次是\(O(n)\),均摊以后就是\(O(1)\)

复杂度振荡:数组等数据结构的扩容和缩容之间出现,原因是没有处理好扩容和缩容因子之间的关系。

平均复杂度或期望复杂度(average/expected complexity)

根据数据结构各种操作出现概率的分布,将对应的成本加权平均。

各种可能的操作,作为独立事件分别考察,割裂了操作之间的相关性 和连贯性,往往不能准确地评判数据结构和算法的真实性能。

分摊复杂度(amortized complexity)

对数据结构连续地实施足够多次的操作,所需总体成本分摊至单次操作。

从实际可行的角度,对一系列操作做整体的考量,更加忠实地刻画了可能出现的操作序列,可以更为精准地评判数据结构和算法的真实性能。

算法的空间复杂度\(S(n)\),定义为该算法所耗费的辅助存储空间,它是问题规模n的函数。渐进空间复杂度通常简称为空间复杂度,记作\(S(n) = O(g(n))\)。

THE END
0.《算法》世界5.低存储性:低存储性是指算法所需的存储空间小。对于像手机、平板电脑这样的嵌入式设备,算法如果占用空间过大,则无法运行。算法占用的空间大小被称为空间复杂度。 五.时间复杂性 在计算机科学中,时间复杂性,又称时间复杂度,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:6364=2
1.软件设计师通俗易懂的去了解算法的特性和要求简介:【软件设计师】通俗易懂的去了解算法的特性和要求 🐓 算法 算法是对特定问题求解步骤的一种描述,算法是指令的有限序列。其中每一条指令表示一个或者多个操作。 🐓 算法的5种属性 有穷性 一个算法必须总是在执行有穷的步骤后,且在每个步骤执行的过程中时间是有限的 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1::374?2
2.算法的基本概念算法的五个特性第二章 算法的基本概念和算法的衡量 一.算法的特征 算法(Algorithm):是对特定问题求解方法(步骤)的一种描述,是指令的有限序列,其中每一条指令表示一个或多个操作。 算法具有以下五个特性 ①有穷性: 一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。 jvzquC41dnuh0lxfp0tfv8r2a9773?6541gsvrhng1jfvjnnu1755?::869
3.算法入门:定义描述特性和效率分析3.1算法的定义 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 简而言之,算法就是解决问题的方法和步骤。 3.2算法的描述 自然语言:英文、中文 流程图:传统流程图、NS流程图 伪代码:类语言:类C语言 jvzquC41dnuh0lxfp0tfv8vsa9924:6951gsvrhng1jfvjnnu1743@6537:
4.什么是算法及其特征一个算法应该具有以下五个重要的特征: 有穷性:一个算法必须保证执行有限步之后结束; 确切性:算法的每一步骤必须有确切的定义; 输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件; 输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1;<:829
5.Algorithm算法: 是对特定问题求解步骤的一种描述,是为了解决一个或者一类问题给出的 一个确定的、有限长的操作序列。 算法的设计依赖于数据的存储结构,因此对确定的问题,应该需求子啊适宜的存储结构上设计出一种效率较高的算法 算法的特性: 有穷性: 对于任何一组合法的输入值,在执行有穷步骤之后一定能结束,即算法中的操jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1B:24:7
6.算法设计与分析(超详解!)第一节算法概述可以理解为:算法(algorithm)是指在解决问题时,按照某种机械的步骤一定可以得到问题的结果(有的问题有解,有的没有)的处理过程。算法就是解决这个问题的方法和步骤的描述。 2.算法的特征 有限性:一个算法必须保证执行有限步骤之后结束,即算法的每个步骤都能在有限的时间内完成。即算法的每个步骤都能在有限的时间内完jvzquC41dnuh0lxfp0tfv87423e88:675:=0c{ykenk0fnyckny03<;7699:;
7.算法的特性和空间复杂度数据结构算法的特性和空间复杂度---数据结构 前言: 在前面我们已经讲过时间复杂度了,空间复杂度也几乎是八九不离十,我们这节主要来讲讲一个好的算法需要满足什么样的特点。 1.算法 算法实际上就是一组一组的操作,在计算机上表现为一组指令,让计算机按照我们想要的逻辑进行运算,并能有效的解决实际问题。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:7676:1
8.入门必看算法基础知识讲解小白都也能看得懂大家好,我是小诚,国庆放假后跟一些小伙伴聊天时发现,大家潜意识里都知道想要进入大厂算法是必须过关的,所以很多人在学校就开始去刷题了,题目虽然刷了许多,但是对于学习算法的初衷和衡量一个算法的指标却是模糊的,所以,博主想写一篇关于学习算法的初衷和算法的指标,帮助准备学习算法或者初学算法的小伙伴将基础巩固。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1A:276<
9.算法算法概述算法inputoutput是对某问题求解步骤的的描述。有输入输出,可以解决某一问题。 二、特征 一个算法应该具有以下五个重要的特征: 有穷性(Finiteness)、确切性(Definiteness)、输入项(Input)、输出项(Output)、可行性(Effectiveness) 有穷性:算法的有穷性是指算法必须能在执行有限个步骤之后终止。 jvzquC41dnuh0lxfp0tfv8|gkzooa=925693:8ftvkimg8igvcomu86262?349>
10.算法及其描述数据结构从上面的两个例子我们可以看出用 C/C++来描述的算法结构更清晰(编写的程序结构化更高,对 d的三种不同情况的处理一目了然)。 3、算法分析 在一个算法设计好后,还需要对其进行分析来确定一个算法的好坏。 算法设计的目标 正确性:要求算法能够正确地预先规定的功能和性能要求。这是最重要也是最基本的标准。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:7257;9
11.认识算法的特性简介:认识算法的特性 如果说数学是皇冠上的一颗明珠,那么算法就是这颗明珠上的光芒,算法让这颗明珠更加熠熠生辉,为科技进步和社会发展照亮了前进的路。数学是美学,算法是艺术。走进算法的人,才能体会它的无穷魅力。 多年来,我有一个梦想,希望每一位提到算法的人,不再立即紧皱眉头,脑海里闪现枯燥的公式、见长的代jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:648:8:
12.C语言从入门到精通第2章算法—自学笔记本文详细介绍了算法的基本概念,包括有穷性、确定性、可行性、输入和输出,并探讨了算法的优劣标准,如正确性、可读性、健壮性和时间复杂度。同时,讲解了算法的描述方法,如自然语言、流程图和N-S流程图,通过实例展示了如何用这些方法表示和分析算法。 前言 jvzquC41dnuh0lxfp0tfv8|gkzooa><2248948ftvkimg8igvcomu86495;4895
13.万字长文不学算法你也应该知道的算法知识三、算法的特性 当然一个问题都是可以由多个算法解决的。俗话说,无规矩不成方圆。 那么不同的算法是不是得有相同的规则,或者说相同的特性,才能约束算法,不能任意一种算法就可以解决问题。 打个比方,就用曹冲称象这个例子吧。为了不浪费大家的脑子,我决定就说的简单一点。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1A7;5;>
14.算法分析与设计算法概述  理解算法的概念。   掌握算法的计算复杂性概念。   掌握算法复杂性的渐近性态的数学表述。   了解NP类问题的基本概念。 二、算法的定义   顾名思义,计算(求解)的方法   算法(Algorithm):对特定问题求解步骤的一种描述,是指令的有限序列。 jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:864873
15.算法分析与设计基础算法设计与分析该博客围绕算法展开,先介绍算法概念、特征、设计模式与描述方法,接着阐述算法效率分析基础,包括时间效率、操作类型、输入规模等。还详细讲解了蛮力法、减治法、分治法、变治法、动态规划和贪心法等常见算法策略,如欧几里得算法、选择排序、二分查找等。 一、绪论 jvzquC41dnuh0lxfp0tfv8vsa8884::461gsvrhng1jfvjnnu1747;>::3>
16.【算法】看《趣学算法》总结了一些算法常识,你不来了解一下遇到一个实际问题,充分利用所学的数据结构,将数据及其之间的关系有效地存储在计算机中,然后选择合适的算法策略,并用程序高效实现。 N.Wirth教授:数据结构+算法=程序。 企业:程序是指程序员以代码为工具,运用数据结构与算法开发系统,最终创造价值。 算法具有哪些特性呢? jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:637:>9
17.算法具有什么特征问答一个算法应该具有以下五个重要的特征:1、有穷性: 一个算法必须保证执行有限步之后结束;2、确切性:jvzquC41fg|fnxugt0gmk‚zp0eun1jxm13858>9
18.数据结构——算法数据算法如今普遍认可的对算法的定义是: 算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并旦每条指令表示一个或多个操作。 二、算法的特性 算法具有五个基本特性:输入、输出、有穷性、确定性和可行性。 输入:算法具有零个或多个输入。所谓的零个输入是指算法本身有初始条件 jvzquC41dnuh0lxfp0tfv87523e92@9:7980c{ykenk0fnyckny03=78;7=79
19.Python算法Algorithm专栏导读清晰的问题定义:首先,确保你充分理解问题的本质和要求。清晰的问题定义将有助于你更好地思考和设计解决方案。 分析问题:在着手设计算法之前,对问题进行仔细的分析。了解问题的特点、约束和目标是关键。 选择合适的数据结构:选择正确的数据结构通常是设计优美算法的第一步。合适的数据结构可以显著影响算法的性能和可读性jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1:868:<:
20.算法与算法分析一个算法必须具备以下五个重要特性: 有穷性一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。 确定性算法中每一条指令必须有确切的含义,没有二义性,在任何条件下只有唯一的一条执行路径,即对相同的输入只能得到相同的输出。 可行性算法是可执行的,算法描述的操作可以通过已经实现的基本操作执jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1A:;648
21.数据结构学习记录算法最简单的描述算法的方法是使用自然语言,用自然语言来描述算法的优点是简单且便于人们对算法的理解和阅读,缺点是不够严谨,易产生歧义。当算法比较复杂且包含很多转移分支时,用自然语言描述就不是那么直观清晰了。 2 算法框图法 使用程序流程图、盒图等算法描述工具来描述算法。其特点是简洁明了、便于理解和交流。 jvzquC41dnuh0lxfp0tfv8ojdw0c{ykenk0fnyckny03=:52;91;
22.干货数据结构与算法什么是算法在现代,最普遍认可的算法的定义是:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。 其实这个也很好理解,就是为了解决某个问题,把一些指令按照顺序排起来,完成一些操作,这就是算法。 算法的特性 说到算法的特征,一般来说公认的有五大基本特征,即:输入,输出,有穷jvzquC41fg|fnxugt0gmk‚zp0eun1jwvkerf1A>493: