空间复杂度怎么算,时间复杂度计算技巧


算法空间复杂度具体怎么算? 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度 , 记做S(n)=O(f(n)) 。 比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。
而一般的递归算法就要有O(n)的空间复杂度了 , 因为每次递归都要存储返回信息 。 一个算法的优劣主要从算法的执行时间和所需要占用的存储空间两个方面衡量 。
类似于 时间复杂度的讨论 , 一个算法的空间复杂度S(n)定义为该算法所耗费的存储空间 , 它也是问题规模n的函数 。 渐近空间复杂度也常常简称为空间复杂度 。 空间复杂度(SpaceComplexity)是对一个算法在运行过程中临时占用存储空间大小的量度 。
一个算法在计算机存储器上所占用的存储空间 , 包括存储算法本身所占用的存储空间 , 算法的输入输出数据所占用的存储空间和算法在运行过程中临时占用的存储空间这三个方面 。 算法的输入输出数据所占用的存储空间是由要解决的问题决定的 , 是通过参数表由调用函数传递而来的 , 它不随本算法的不同而改变 。

扩展资料:分析
分析一个算法所占用的存储空间要从各方面综合考虑 。 如对于递归算法来说 , 一般都比较简短 , 算法本身所占用的存储空间较少 , 但运行时需要一个附加堆栈 , 从而占用较多的临时工作单元;
若写成非递归算法 , 一般可能比较长 , 算法本身占用的存储空间较多 , 但运行时将可能需要较少的存储单元 。
一个算法的空间复杂度只考虑在运行过程中为局部变量分配的存储空间的大小 , 它包括为参数表中形参变量分配的存储空间和为在函数体中定义的局部变量分配的存储空间两个部分 。
若一个算法为递归算法 , 其空间复杂度为递归所使用的堆栈空间的大小 , 它等于一次调用所分配的临时存储空间的大小乘以被调用的次数(即为递归调用的次数加1 , 这个1表示开始进行的一次非递归调用) 。
【空间复杂度怎么算,时间复杂度计算技巧】参考资料来源:

程序的时间复杂度和空间复杂度怎么算 排序算法 所谓排序 , 就是使一串记录 , 按照其中的某个或某些关键字的大小 , 递增或递减的排列起来的操作 。 分类 在计算机科学所使用的排序算法通常被分类为: 计算的复杂度(最差、平均、和最好表现) , 依据串列(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) 如果使用最佳的现在版本 Comb sort — O(n log n) 堆排序 (heapsort)— O(n log n) Smoothsort — 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), 但需要特别的硬体 排序的算法 排序的算法有

推荐阅读