数据结构:求算法的时间与空间复杂度

2021-02-17 08:15:48 字数 5434 阅读 3502

1楼:匿名用户

有的算法的时bai间复杂度一du眼就能看出来,有的则需要zhi数学计算和证明.比如dao这个算法的时间复杂专度就无法直观的看属出来.如果你不是数学专业的,感觉没必要知道计算过程.

反正经典查找算法(不包括哈希了就。。)就那么几种:二分,二叉树,堆,顺序查找。

前三个都是logn,最后一个是n。记住就完了

2楼:匿名用户

设二叉树的节点数n,高度h

二分查找的时间复杂度o(h)=o(lgn)

空间复杂度是递归压栈导致的跟树的深度一致o(h)=o(lgn)

数据结构中算法的时间和空间复杂度怎么计算

3楼:匿名用户

你好.t(n)=o( f (n) )  表示时间问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同.称作 时间复杂度.如下:1. 2.

 for (i=1;i<=n;++i) 3. for ( j=1; j<=n;++j ) for (k+1;j<=n;++k) 基本操作“x增1”的语句的频度分别为1.n和n的平方.则这三个程序段的时间复杂度分别 为.o(1).

o(n)..o(n平方).分别为常量阶.线性阶.和平方阶...算法可能呈现 的时间 复杂度还有对数阶o(long n) .指数阶o(2 n方)等 .空间复杂度:  s(n)=o(f(n))其中n为问题的规模(或大小).一个上机执行的程序 除了需要存储空间来寄存本身所用指令.常数.变量和输入数据外.也要一些对数据进行操作 的工作单元和存储一些为实现计算所需信息的空间.若输入数据所占的空间只取决于问题本身,和算法无关,则只要分析除输入和程序之处的额处空间,否则应同时考虑输入本身所需空间...

有点抽象...因为本人也学不好.所以.只能回答这些..见谅..

4楼:匿名用户

排序算法 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 分类 在计算机科学所使用的排序算法通常被分类为: 计算的复杂度(最差、平均、和最好表现),依据串列(list)的大小(n)。

一般而言,好的表现是o。(n log n),且坏的行为是ω(n2)。对於一个排序理想的表现是o(n)。

仅使用一个抽象关键比较运算的排序算法总平均上总是至少需要ω(n log n)。 记忆体使用量(以及其他电脑资源的使用) 稳定度:稳定排序算法会依照相等的关键(换言之就是值)维持纪录的相对次序。

也就是一个排序算法是稳定的,就是当有两个有相等关键的纪录r和s,且在原本的串列中r出现在s之前,在排序过的串列中r也将会是在s之前。 一般的方法:插入、交换、选择、合并等等。

交换排序包含冒泡排序(bubble sort)和快速排序(quicksort)。选择排序包含shaker排序和堆排序(heapsort)。 当相等的元素是无法分辨的,比如像是整数,稳定度并不是一个问题。

然而,假设以下的数对将要以他们的第一个数字来排序。 (4, 1) (3, 1) (3, 7) (5, 6) 在这个状况下,有可能产生两种不同的结果,一个是依照相等的键值维持相对的次序,而另外一个则没有: (3, 1) (3, 7) (4, 1) (5, 6) (维持次序) (3, 7) (3, 1) (4, 1) (5, 6) (次序被改变) 不稳定排序算法可能会在相等的键值中改变纪录的相对次序,但是稳定排序算法从来不会如此。

不稳定排序算法可以被特别地时作为稳定。作这件事情的一个方式是人工扩充键值的比较,如此在其他方面相同键值的两个物件间之比较,就会被决定使用在原先资料次序中的条目,当作一个同分决赛。然而,要记住这种次序通常牵涉到额外的空间负担。

排列算法列表 在这个**中,n是要被排序的纪录数量以及k是不同键值的数量。 稳定的 冒泡排序(bubble sort) — o(n2) 鸡尾酒排序 (cocktail sort, 双向的冒泡排序) — o(n2) 插入排序 (insertion sort)— o(n2) 桶排序 (bucket sort)— o(n); 需要 o(k) 额外 记忆体 计数排序 (counting sort) — o(n+k); 需要 o(n+k) 额外 记忆体 归并排序 (merge sort)— o(n log n); 需要 o(n) 额外记忆体 原地归并排序 — o(n2) 二叉树排序 (binary tree sort) — o(n log n); 需要 o(n) 额外记忆体 鸽巢排序 (pigeonhole sort) — o(n+k); 需要 o(k) 额外记忆体 基数排序 (radix sort)— o(n·k); 需要 o(n) 额外记忆体 gnome sort — o(n2) library sort — o(n log n) with high probability, 需要 (1+ε)n 额外记忆体 不稳定 选择排序 (selection sort)— o(n2) 希尔排序 (shell sort)— o(n log n) 如果使用最佳的现在版本 ***b sort — o(n log n) 堆排序 (heapsort)— o(n log n) **oothsort — o(n log n) 快速排序 (quicksort)— o(n log n) 期望时间, o(n2) 最坏情况; 对於大的、乱数串列一般相信是最快的已知排序 introsort — o(n log n) patience sorting — o(n log n + k) 最外情况时间, 需要 额外的 o(n + k) 空间, 也需要找到最长的递增子序列(longest increasing subsequence) 不实用的排序算法 bogo排序 — o(n × n!) 期望时间, 无穷的最坏情况。

stupid sort — o(n3); 递回版本需要 o(n2) 额外记忆体 bead sort — o(n) or o(√n), 但需要特别的硬体 pancake sorting — o(n), 但需要特别的硬体 排序的算法 排序的算法有

数据结构算法:求时间复杂度和空间复杂度 5

5楼:听不清啊

(1)时间复杂度 o(logn)

空间复杂度 o(1)

(2)时间复杂度 o(logn)

空间复杂度 o(logn)

学数据结构和算法时,时间,空间复杂性计算很重要吗?

6楼:匿名用户

肯定要学的,因为这方面的知识有助于您对解决问题时算法的选择。虽然不一定您能够回很精确的计算出答某个算法的时间和空间复杂度,但是至少要能够判断哪个算法的时间或空间复杂度更优。

如果您将来打算从事算法方面的研究,或读相关方面的研究生,则这个是至关重要的,毕竟您提出的一个算法要说服别人使用,那么除了解决问题的有效性或具有某种其他算法不具有的特性或特征之外,时间和空间复杂度具有较好的说服力。

如果您仅仅只是打算从事软件行业,进行软件开发等工作,在不涉及到算法优化的情况下,您可以只是仅仅对其有所了解即可。

不过就作为一名学生来说,这方面的知识实际上并不难也很浅显,理解和掌握它其实没什么的,如果您在刚接触时觉得较难理解,不妨先记住相关概念,在学习过程中去不断加深理解。

7楼:匿名用户

要学而且一定要学好,甚至还要去找一些算法**去练习。因为算法与数据结构决定一个程序员的起点。如果你校招想进国际化大公司,就多在这上面下功夫。

教科书很繁琐,你可以选择看一些国外大学的教材,或者公开课。

8楼:匿名用户

怎么会不重要呢

。同样解决一个问题,如果a算法花的时间是log来计算的版,b算法是n×权n×n即n的三次方。当数据量很大的时候,b算法能让计算机跑死,你就慢慢等吧,而a算法早就有结果了。

到大规模数据应用的时候,这种差别明显得要命。如果不重要,讲这个干什么。如果程序员没有这种基本嗅觉是不合格的。

9楼:匿名用户

时间空间复杂度其实就是你以后写出来的程序的运行时间和需要空间··在数据很大的时候运行时间会受影响··

你打算做这行····还是学学吧

貌似考研里经常考和排序一起

10楼:冰之幽魂

实例特征是程序中某一步有参考意义的语句。就是计算这一条语句的复杂度。我也觉得好难,一看到数学初等函数就头大,循环还好,递归看得我肾虚

数据结构算法的时间复杂度

11楼:匿名用户

按照分析惯例,假设所有单一运算的时间复杂度均为1

x=n; ......1

while(x>=(y+1)*(y+1)) ......4(两次加法、1次乘法、1次比较)

y=y+1 ......1

时间复杂度 = 1 + (4 + 1) x 循环次数

循环次数是由n和y的初始值决定的,假设循环次数为n,y的初始值为y0,y的结束状态为yn,有

x < (yn + 1)*(yn + 1) ......假设y的初始值为整数,则yn为满足该式的最小整数

n = (yn - y0) / 1 ......因为每次循环y的递增量为1

1式简化为 x = (yn + 1)*(yn + 1),可得:yn = n^(1/2) - 1

所以n = n^(1/2) - 1 - y0

采用大o表示法,仅考虑最高次项,则求n的复杂度为o(n^(1/2))

进而求得你这3行**的

总体复杂度 = 1 + (4 + 1) x o(n^(1/2))

由于已知的常数项及非最高次项通常会被忽略(大o精神),所以总时间复杂度为o(n^(1/2))

12楼:匿名用户

************我谈**********************

“如果执行时间的算法不按照问题规模n的增加而增长,即使成千上万的语句的算法,其执行的时间,但也有大量的常数。该算法的时间复杂度是o(1)。“

不要明白这一点吗?

所以该算法是不是说多少单一的语言

温度=;

= j;

j =温度; />共三种语言中,和每个频率是1,且每个频率可以被认为是o(1),则t(n)的= o的(1)+ o(1)+ o(1)= o( 1)。

以下四个语句:

scanf的(“为%d”,&n);

= n;

(i = 0,

(i = 0,i

前两个栏的频率分别为

频率为n和n * n

(1)的总频率的所有

o. + o (1)+ o(n)+ o(n * n)= o(n * n)

(为什么这个等式的左边是等于右侧的o(n * n)??不要问我,我懒得说了,这是一个c / c + +的问题,这是一个数学问题,不明白自己看到的高等数学。)

声明,更多的是总是有限的,或一个单独的语句的频率最花时间

单个语句,比如for()}}而( 1)}等等这样的,可以视为一个忘记

一份声明中可以执行了n年没有完成,如:f(i = 0; + +),除非你终止!!

数据结构算法时间复杂度定义,数据结构与算法,请问时间复杂度是怎么判定的?

1楼 匿名用户 1 时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间...

数据结构中各种排序的时间复杂度与空间复杂度比较

1楼 匿名用户 冒泡排序 是稳定的,算法时间复杂度是o n 2 。 2 2 选择排序 selection sort 选择排序的基本思想是对待排序的记录序列进行n 1遍的处理,第i遍处理是将l i n 中最小者与l i 交换位置。这样,经过i遍处理之后,前i个记录的位置已经是正确的了。 选择排序是不稳...

c语言,时间复杂度与空间复杂度,算法时间公式t(n)o(f

1楼 匿名用户 算法的时间复杂度 为了便于比较同一问题的不同算法,通常从算法中抽取一种或者多种有代表性的基本操作,再以这些基本操作重复执行的次数与问题规模的关系t n 作为算法的时间性量度。 如果t n 和 f n 是n 的函数,当n 时,有t n f n c 常数c 0 ,记作 t n o f n...