首页 > 编程语言 > 详细

算法的时间复杂度

时间:2021-08-16 22:45:47      阅读:29      评论:0      收藏:0      [点我收藏+]

数据结构与算法一览:

Data Structure 数据结构  Algorithm 算法

Array

数组 General Coding 一般编码
Stack / Queue 栈 / 队列 In-order / Pre-order / Post-order traversal 前序 / 中序 / 后序 遍历树
PriorityQueue(heap) 优先队列(堆) Greedy 贪心算法
LinkedList(single / double) 单向链表 / 双向链表 Recursion / Backtrace 递归 / 回溯
Tree / Binary Tree 树 / 二叉树 Breadth-first search 广度优先查找
Binary Search Tree 二分查找树 Depth-first search 深度优先查找
HashTable 散列表 Divide and Conquer 分词算法
Disjoint Set 并查集 Dynamic Programming 动态规划
Trie 字母树 Binary Search 二分查找
BloomFilter 布隆过滤器 Graph
LRU Cache 最近使用缓存    

 

Big O notation (O的复杂度):

  O(1) : Constant Complexity 常数复杂度

  O(logn):Logarithmic Complexity 对数复杂度

  O(n):Linear Complexity 线性时间复杂度

  O(n^2):N square Complexity N的平方复杂度

  O(n^3):N square Complexity N的立方复杂度

  O(2^n):Exponential Growth 指数

  O(n!):Factorial 阶乘

  注意:多个复杂度进行联合算法,只看最高复杂度即可。

复杂度示例:

 O(1) 

int n = 1000;
System.out.print("hey boy" + n);

 O(n)

for(int i = 1; i <= n; i ++) {
    System.out.println(" hey boy, i am " + i);
  }

 O(n ^ 2)

 for (int i = 1; i <= n; i ++) {
    for (int j = 1; j <= n; j++) {
      System.out.println(" hey boy, i am" + i  + " and " + j);
    }
  }

 

 

 

 总结:由下图可以看出,不同时间复杂度随着时间的推移,差距会越来越大。所以当算法优化一点,在高并发情况下,收益会非常大。

技术分享图片

 

 

 To calculate

  • 1 + 2 + 3 + .... + n
    时间复杂度为O(n)
    y = 0 for i = 1 to n: y = i + y
    时间复杂度为O(1)
    y = n * (n + 1) / 2

What a recursion ?

  • Fibonacci array: 1、1、2、3、5、8、13、21、34、....
  • F(n) = F(n - 1) + F(n - 2)
时间复杂度是O(2^n),代码虽然看起来很简单,但是计算机执行更复杂。
def fib(n):
    if n == 0 or n == 1
        return n
    return fib(n - 1) + fib(n - 2)

主定律:Master Theorem

Application to common algorithms

Algorithm Recurrence relationship Run time
Binary Search 二分查找 T(n) = T(n/2) + O(1) O(logn)
Binary tree traversal 二叉树遍历 T(n) = 2T(n/2) + O(1) O(n)
Optimal sorted matrix search 排序二维矩阵 T(n) = 2T(n/2) + O(logn) O(n)
Merge sort 快排,归并排序 T(n) = 2T(n/2) + O(n) O(n*logn)

算法的时间复杂度

原文:https://www.cnblogs.com/yssd/p/15149828.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!