Hello Algorithm:Capture 1,2 初识算法

news2024/12/23 13:07:36

        大家好 :)  自学完sklearn的基本使用后,颇感无趣。虽有阅文几篇,却无所获。遂于24年9月26日决习hello algorithm。 :)

        好了,不开玩笑了。其实开设这篇专栏我也不知道有没有什么意义。其实是因为最近在读TaskWeaver,但是源码又看不懂(当然看完了我会第一时间给大家总结的),感到头疼,所以决定摸摸鱼,继续写写自己的小博客~~~

        这个专栏主要是对网站教程的总结与代码实现,能力有限,欢迎大家一同交流讨论!

        教程网站:序 - Hello 算法

        

何为算法

        算法即是有限时间内解决问题的思路,旨在达到时间与空间上的最优,这意味着我们写代码并不局限于一种语言。但是我用python

        而数据结构则是组织和存储数据的方式,尽量占用少内存,操作尽量快速,提供简洁的数据表示。

        

复杂度分析

        简单来说,在执行的代码中,我们不仅要达到运行时间的最短,也要尽量达到最少的空间效率。实际过程考虑到硬件、数据大小、测试时间等影响,很少展开完整的测试实验,而是通过复杂度分析来进行判断

迭代

        迭代即循环,我们通过简单的案例熟悉一下基本的for, while循环。

def for_loop(n: int) -> int:
    """
    
    时间复杂度 o(n)
    空间复杂度 o(1)
    
    :param n: 
    :return:  
    """
    res = 0
    for i in range(1, n+1):
        res += i
    return res

for_loop(3) 
def while_loop(n: int) -> int:
    res = 0
    i = 1
    while i <= n:
        res += i
        i += 1
    return res

while_loop(3)

        这个代码也很简单,就是实现通过简单的循环实现一个累加。时间复杂度和空间复杂度也都是相同的。因为循环次数是与参数n相关,所以时间复杂度就是 o(n), 与其同时由于空间上只有n一个变量,那么我们的空间复杂度就是 o(1)。很简单吧!

递归

        递归主要是通过调用函数自身来解决问题。递归函数就是先一次又一次的深入到最深层,然后再从最深层一层一层的叠加结果。

def recur(n: int) -> int:
    if n == 1:
        return 1
    res = recur(n - 1)
    return n + res

recur(3)

        当然这个函数的时空复杂度怎么算呢?也还可以,调用了3次函数,每次都有一个新的n,所以时空复杂的都是o(n)

        当然递归也有不同,具体表现为如下:

  • 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下文。
  • 尾递归:递归调用是函数返回前的最后一个操作,这意味着函数返回到上一层级后,无须继续执行其他操作,因此系统无须保存上一层函数的上下文。

def tail_recur(n, res):
    """尾递归"""
    # 终止条件
    if n == 0:
        return res
    # 尾递归调用
    return tail_recur(n - 1, res + n)

        当然看似某些问题十分困难,但是利用递归会非常简易进行实现。比如:

def fib(n: int) -> int:
    """
    
    时间复杂度 o(2n)
    空间复杂度 o(n)
    
    :param n: 
    :return: 
    """
    # f(n) = f(n-1) + f(n-2)
    if n == 1:
        return 0
    if n == 2:
        return 1
    
    return fib(n - 1) + fib(n - 2)

fib(5)

        给大家留个小思考,计算下时空复杂度 :), 当然我写在上面了,可以思考一下为什么。

困了,今天就学到这,晚安~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2168863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于最小二乘法

最小二乘法的核心思想简单而优雅&#xff1a;我们希望找到一条最佳的曲线&#xff0c;使其尽可能贴近所有的数据点。想象一下&#xff0c;当你在画布上描绘一条线&#xff0c;目标是让这条线与点的距离最小。数学上&#xff0c;这可以表示为&#xff1a; 在这个公式中&#xff…

Eclipse Memory Analyzer (MAT)提示No java virtual machine was found ...解决办法

1&#xff0c;下载mat后安装&#xff0c;打开时提示 jdk版本低&#xff0c;需要升级到jdk17及以上版本&#xff0c;无奈就下载了jdk17&#xff0c;结果安装后提示没有jre环境&#xff0c;然后手动生成jre目录&#xff0c;命令如下&#xff1a; 进入jdk17目录&#xff1a;执行&…

SpringBoot的基础(自动配置)

SpringBootApplication注解 是一个组合注解&#xff0c;其中EnableAutoConfiguration让SpringBoot根据类路径中的jar包依赖为当前项目进行自动配置 例如&#xff1a;添加了spring-boot-starter-web依赖&#xff0c;会自动添加Tomcat和SpringMVC的依赖 添加了spring-boot-start…

【UE5】将2D切片图渲染为体积纹理,最终实现使用RT实时绘制体积纹理【第四篇-着色器投影-接收阴影部分】

上一章中实现了体积渲染的光照与自阴影&#xff0c;那我们这篇来实现投影 回顾 勘误 在开始本篇内容之前&#xff0c;我已经对上一章中的内容的错误进行了修改。为了确保不会错过这些更正&#xff0c;同时也避免大家重新阅读一遍&#xff0c;我将在这里为大家演示一下修改的…

LeetCode - 850 矩形面积 II

题目来源 850. 矩形面积 II - 力扣&#xff08;LeetCode&#xff09; 题目描述 给你一个轴对齐的二维数组 rectangles 。 对于 rectangle[i] [x1, y1, x2, y2]&#xff0c;其中&#xff08;x1&#xff0c;y1&#xff09;是矩形 i 左下角的坐标&#xff0c; (xi1, yi1) 是该…

灵当CRM index.php接口SQL注入漏洞复现 [附POC]

文章目录 灵当CRM index.php接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 灵当CRM index.php接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内的相关技…

数据治理003-数据域

数据仓库是面向主题&#xff08;数据综合、归类并进行分析利用的抽象&#xff09;的应用。 数据仓库模型设计除横向的分层外&#xff0c;通常也需要根据业务情况进行纵向划分数据域。数据域是联系较为紧密的数据主题的集合&#xff0c;通常是根据业务类别、数据来源、数据用途…

001、视频添加字幕

1. 腾讯智影 (可用) https://zenvideo.qq.com/ 1.1 操作步骤 https://zenvideo.qq.com/ https://zenvideo.qq.com/my/material?typeexport 上传资源 自动字幕识别 修改字幕 下载字幕 上传字幕 https://zenvideo.qq.com/my/material?typeexport 2. 秒剪–手机版app &a…

【Python-GUI图形化界面-PyQt5模块(3)】——Qwidget核心模块

本文旨在带大家学习Python中的一种GUI图形化界面模块——PyQt5模块&#xff0c;将为大家详细了解PyQt5模块中函数的参数和使用&#xff1a; 一、PyQt5简介 PyQt是Qt框架的Python语言实现&#xff0c;由Riverbank Computing开发&#xff0c;是最强大的GUI库之一。 官方网站&a…

Win32打开UWP应用

最近无意间发现Windows里一个神奇的文件夹。 shell:appsfolder 运行打开 这个文件夹后&#xff0c;你可以看到本机安装的所有应用程序。 我觉得这个挺方便的&#xff0c;所以做了一个简单的appFolderDialog包给C#用 项目地址&#xff1a;https://github.com/TianXiaTech/App…

大数据毕业设计选题推荐-内蒙古旅游景点数据分析系统-Hive-Hadoop-Spark

✨作者主页&#xff1a;IT研究室✨ 个人简介&#xff1a;曾从事计算机专业培训教学&#xff0c;擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

【有啥问啥】深度理解主动学习:机器学习的高效策略

深度理解主动学习&#xff1a;机器学习的高效策略 在大数据时代&#xff0c;数据量的爆炸性增长与有限的标注资源之间的矛盾日益凸显。如何高效地利用标注资源来训练高质量的模型&#xff0c;成为了机器学习领域亟待解决的问题。主动学习&#xff08;Active Learning, AL&…

Oracle RMAN 无敌备份脚本

1 说明 上一篇文章&#xff1a;Oracle逻辑备份脚本&#xff0c;介绍了如何部署Oracle数据库的逻辑备份脚本&#xff0c;在数据迁移场景下十分好用&#xff0c;但是作为备份来说有点牵强。仅仅有逻辑备份时&#xff0c;当故障发生后&#xff0c;逻辑备份恢复只能恢复到某一时刻…

网络资源模板--Android Studio 飞机大战游戏

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--飞机大战 二、项目测试环境 三、项目详情 首页 1. **继承 Activity**: - SecondActivity 类继承自 Activity&#xff0c;表示一个新的屏幕或界面。 2. **重写 onCrea…

FLUX.1图像生成模型:AI工程师的实践与探索

文章目录 1 FLUX.1系列模型2 AI工程师的视角3 ComfyUI部署4 FLUX.1部署5 工作流6 面向未来 黑森林实验室&#xff08;Black Forest Labs&#xff09;研发的FLUX.1图像生成模型&#xff0c;以其120亿参数的庞大规模&#xff0c;正在重新定义图像生成技术的新标准。FLUX.1系列模型…

服务器数据恢复—SAN环境下LUN映射出错导致文件系统一致性出错的数据恢复案例

服务器数据恢复环境&#xff1a; SAN环境下一台存储设备中有一组由6块硬盘组建的RAID6磁盘阵列&#xff0c;划分若干LUN&#xff0c;MAP到不同业务的SOLARIS操作系统服务器上。 服务器故障&#xff1a; 用户新增了一台服务器&#xff0c;将存储中的某个LUN映射到新增加的这台服…

yolo自动化项目实例解析(六)自建UI(主窗口、预览窗口)

前面我们大致把各个代码块梳理出来了&#xff0c;但是还是不知道从那块开始&#xff0c;我们这里主要先通过ui页面的元素去推理整个执行过程&#xff0c;我们首先需要知道ui功能里面有那些组件 qt设计师基础控件 Qt Designer 是一个图形界面设计工具&#xff0c;用于创建 Qt 应…

遇到慢SQL、SQL报错,应如何快速定位问题 | OceanBase优化实践

在数据库的使用中&#xff0c;大家时常会遇到慢SQL&#xff0c;或执行出错的SQL。对于某些SQL问题&#xff0c;其错误原因显而易见&#xff0c;但也有不少情况难以直观判断。面对这类问题&#xff0c;我们应当如何应对&#xff1f;如何准确识别SQL错误的根源&#xff1f;是否需…

电脑usb接口封禁如何实现?5种禁用USB接口的方法分享!(第一种你GET了吗?)

“防患于未然&#xff0c;安全始于细节。”在信息技术飞速发展的今天&#xff0c;企业的信息安全问题日益凸显。 USB接口作为数据传输的重要通道&#xff0c;在带来便利的同时&#xff0c;也成为了数据泄露和安全风险的高发地。 因此&#xff0c;对电脑USB接口进行封闭管理&a…

WPF项目中使用Caliburn.Micro框架实现日志和主题切换

目录 一、添加Caliburn.Micro框架 二、配置Serilog日志 三、实现主题切换 Caliburn.Micro是MVVM模式的轻量级WPF框架&#xff0c;简化了WPF中的不少用法。这个框架中所有的页面控制都是通过ViewModel去实现的。 以下内容是自己在进行项目实战的同时进行记录的&#xff0c;对于…