Add Q&A of computational_complexity and graph chapter (#512)

* add Q&A in the summary.md of computational complexity chapter

* add Q&A in the summary.md of graph

* Update summary.md

* Update summary.md

* Update summary.md

* Update summary.md

---------

Co-authored-by: Yudong Jin <krahets@163.com>
This commit is contained in:
Sizhuo Long
2023-05-24 20:46:12 +08:00
committed by GitHub
parent dc49fdf75e
commit 16365ae5f0
3 changed files with 34 additions and 4 deletions

View File

@@ -21,3 +21,20 @@
- 算法运行过程中的相关内存空间可分为输入空间、暂存空间、输出空间。通常情况下,输入空间不计入空间复杂度计算。暂存空间可分为指令空间、数据空间、栈帧空间,其中栈帧空间通常仅在递归函数中影响空间复杂度。
- 我们通常只关注最差空间复杂度,即统计算法在最差输入数据和最差运行时间点下的空间复杂度。
- 常见空间复杂度从小到大排列有 $O(1)$ , $O(\log n)$ , $O(n)$ , $O(n^2)$ , $O(2^n)$ 等。
## Q & A
!!! question "尾递归的空间复杂度是 $O(1)$ 吗?"
理论上,尾递归函数的空间复杂度可以被优化至 $O(1)$ 。不过绝大多数编程语言(例如 Java, Python, C++, Go, C# 等)
都不支持自动优化尾递归,因此一般来说空间复杂度是 $O(n)$ 。
!!! question "函数和方法这两个术语的区别是什么?"
函数function可以独立被执行所有参数都以显式传递。
方法method与一个对象关联方法被隐式传递给调用它的对象方法能够对类的实例中包含的数据进行操作。
!!! question "图片“空间复杂度的常见类型”反映的是否是占用空间的绝对大小?"
不是,该图片展示的是空间复杂度(即增长趋势),而不是占用空间的绝对大小。每个曲线都包含一个常数项,用来把所有曲线的取值范围压缩到一个视觉舒适的范围内。
实际中,因为我们通常不知道每个方法的“常数项”复杂度是多少,所以一般无法仅凭复杂度来选择 $n = 8 之下的最优解法;但相对地 $n = 8^5$ 就很好选了,这是复杂度占主导的情况。