Hello Algorithm:Capture 1,2 初识算法

[复制链接]
发表于 2026-1-16 10:00:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
        各人好   自学完sklearn的根本使用后,颇感无趣。虽有阅文几篇,却无所获。遂于24年9月26日决习hello algorithm。 :)
        好了,不开顽笑了。实在开设这篇专栏我也不知道有没有什么意义。实在是由于迩来在读TaskWeaver,但是源码又看不懂(固然看完了我会第一时间给各人总结的),感到头疼,以是决定摸摸鱼,继承写写自己的小博客~~~
        这个专栏紧张是对网站教程的总结与代码实现,本领有限,欢迎各人一同互换讨论!
        教程网站:序 - Hello 算法
        

作甚算法

        算法便是有限时间内办理标题的思绪,旨在到达时间与空间上的最优,这意味着我们写代码并不范围于一种语言。但是我用python。
        而数据结构则是构造和存储数据的方式,只管占用少内存,使用只管快速,提供轻便的数据体现。
        
复杂度分析

        简朴来说,在实行的代码中,我们不光要到达运行时间的最短,也要只管到达最少的空间服从。现实过程思量到硬件、数据巨细、测试时间等影响,很少睁开完备的测试实行,而是通过复杂度分析来举行判定。
迭代

        迭代即循环,我们通过简朴的案例熟悉一下根本的for, while循环。
  1. def for_loop(n: int) -> int:
  2.     """
  3.    
  4.     时间复杂度 o(n)
  5.     空间复杂度 o(1)
  6.    
  7.     :param n:
  8.     :return:  
  9.     """
  10.     res = 0
  11.     for i in range(1, n+1):
  12.         res += i
  13.     return res
  14. for_loop(3)
复制代码
  1. def while_loop(n: int) -> int:
  2.     res = 0
  3.     i = 1
  4.     while i <= n:
  5.         res += i
  6.         i += 1
  7.     return res
  8. while_loop(3)
复制代码
        这个代码也很简朴,就是实现通过简朴的循环实现一个累加。时间复杂度和空间复杂度也都是雷同的。由于循环次数是与参数n相干,以是时间复杂度就是 o(n), 与其同时由于空间上只有n一个变量,那么我们的空间复杂度就是 o(1)。很简朴吧!
递归

        递归紧张是通过调用函数自身来办理标题。递归函数就是先一次又一次的深入到最深层,然后再从最深层一层一层的叠加效果。
  1. def recur(n: int) -> int:
  2.     if n == 1:
  3.         return 1
  4.     res = recur(n - 1)
  5.     return n + res
  6. recur(3)
复制代码
        固然这个函数的时空复杂度怎么算呢?也还可以,调用了3次函数,每次都有一个新的n,以是时空复杂的都是o(n)。
        固然递归也有差别,具体体现为如下:


  • 平常递归:当函数返回到上一层级的函数后,须要继承实行代码,因此体系须要生存上一层调用的上下文。
  • 尾递归:递归调用是函数返回前的末了一个使用,这意味着函数返回到上一层级后,无须继承实行其他使用,因此体系无须生存上一层函数的上下文。

  1. def tail_recur(n, res):
  2.     """尾递归"""
  3.     # 终止条件
  4.     if n == 0:
  5.         return res
  6.     # 尾递归调用
  7.     return tail_recur(n - 1, res + n)
复制代码
        固然看似某些标题非常困难,但是使用递归会非常浅显举行实现。好比:

  1. def fib(n: int) -> int:
  2.     """
  3.    
  4.     时间复杂度 o(2n)
  5.     空间复杂度 o(n)
  6.    
  7.     :param n:
  8.     :return:
  9.     """
  10.     # f(n) = f(n-1) + f(n-2)
  11.     if n == 1:
  12.         return 0
  13.     if n == 2:
  14.         return 1
  15.    
  16.     return fib(n - 1) + fib(n - 2)
  17. fib(5)
复制代码
        给各人留个小思索,盘算下时空复杂度 :), 固然我写在上面了,可以思索一下为什么。
困了,本日就学到这,晚安~
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表