美文网首页
大O符号

大O符号

作者: 月禅 | 来源:发表于2023-02-09 14:12 被阅读0次

衡量一个算法的空间/时间的复杂度。
注:具体使用,要根据对应的数据量的多次做出选择。

常用的复杂度:

O(1)

索引查找

O(log n)

对半查找

O(n)

数组遍历和线性搜索

O(n log n)

最快的通用排序算法,合并排序和堆排序

O(n^2)

插入排序

O(2^n)

你想避免这些算法,但有时你别无选择。仅向输入添加一位会使运行时间加倍。示例:旅行推销员问题

O(n!)

阶乘 慢得无法忍受。做任何事情都需要一百万年的时间

image.png

以下是每个性能类别的一些示例:

O(1)

复杂度为 O(1) 的最常见示例是访问数组索引。

let value = array[5]
O(1) 的另一个例子是从堆栈中压入和弹出。

O(log n)

var j = 1
while j < n {
// do constant time stuff
j *= 2
}
不是简单地增加,'j' 在每次运行中增加 2 倍。

二进制搜索算法是 O(log n) 复杂度的一个例子。

在)

for i in stride(from: 0, to: n, by: 1) {
print(array[i])
}
数组遍历和线性搜索是 O(n) 复杂度的例子。

O(n日志n)

for i in stride(from: 0, to: n, by: 1) {
var j = 1
while j < n {
j *= 2
// do constant time stuff
}
}
或者

for i in stride(from: 0, to: n, by: 1) {
func index(after i: Int) -> Int? { // multiplies i by 2 until i >= n
return i < n ? i * 2 : nil
}
for j in sequence(first: 1, next: index(after:)) {
// do constant time stuff
}
}
合并排序和堆排序是 O(n log n) 复杂度的例子。

O(n^2)

for i in stride(from: 0, to: n, by: 1) {
for j in stride(from: 1, to: n, by: 1) {
// do constant time stuff
}
}
遍历一个简单的二维数组和冒泡排序是 O(n^2) 复杂度的例子。

O(n^3)

for i in stride(from: 0, to: n, by: 1) {
for j in stride(from: 1, to: n, by: 1) {
for k in stride(from: 1, to: n, by: 1) {
// do constant time stuff
}
}
}
O(2^n)

运行时间为 O(2^N) 的算法通常是递归算法,通过递归地解决两个大小为 N-1 的较小问题来解决大小为 N 的问题。以下示例打印了解决著名的 N 盘“汉诺塔”问题所需的所有步骤。

func solveHanoi(n: Int, from: String, to: String, spare: String) {
guard n >= 1 else { return }
if n > 1 {
solveHanoi(n: n - 1, from: from, to: spare, spare: to)
solveHanoi(n: n - 1, from: spare, to: to, spare: from)
}
}
在!)

下面给出了花费 O(n!) 时间的最简单的函数示例。

func nFactFunc(n: Int) {
for i in stride(from: 0, to: n, by: 1) {
nFactFunc(n: n - 1)
}
}

相关文章

  • 学习笔记2020-06-04

    1、大O符号 大O代表上界符号。 2、下界符号 3、小o符号 4、下界符号2 5、阶相等符号

  • IOS开发_基础概念01

    1、大O符号(Big O notation); 2、 1、大O符号(Big Onotation); 1.1 简介:...

  • 渐进符号

    上界大O符号 定义:TODO 下界大Ω(Omiga)符号 定义:TODO 上界小o符号 定义:TODO 下界小ω(...

  • 大O符号

    算法复杂度的相对表示。 描述了一个算法如何执行和缩放。 描述了函数增长率的上限,可以考虑最坏的情况。 现在快速看一...

  • 大 O 符号

    大 O 符号[https://zh.wikipedia.org/wiki/%E5%A4%A7O%E7%AC%A6%...

  • 大O符号

    衡量一个算法的空间/时间的复杂度。注:具体使用,要根据对应的数据量的多次做出选择。 常用的复杂度: O(1) 索引...

  • 大O符号基础

    大O符号(Big O notation), 又称渐进符号,是用于描述函数的渐近行为的数学符号。它是指用另一个(通常...

  • 算法复杂度分析

    事后统计法 测试结果非常依赖测试环境测试结果受数据规模的影响很大 大 O 复杂度表示法 大O符号 大O符号(英语:...

  • iOS开发经验(22)-数据结构

    目录 时间复杂度-大 O 标记 1. 时间复杂度-大 O 标记 大 O,说的是字母 O,而不是数字 0。这个符号用...

  • 算法概论笔记 - 大O符号

    引入 Fibonacci 指数Version 包含大量重复计算步骤,基本操作次数为n的指数 线性Version 对...

网友评论

      本文标题:大O符号

      本文链接:https://www.haomeiwen.com/subject/vxockdtx.html