算法设计与分析课程

news2024/11/25 22:25:18

在这里插入图片描述
在这里插入图片描述

算法的由来

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

算法的定义

在这里插入图片描述
算法的定义:给定计算问题,算法是一系列良定义计算步骤,逐一执行计算步骤可得到预期的输出。
良定义:定义明确无歧义
计算步骤:计算机可以实现的指令
有了良定义的计算步骤,计算机就可以 逐一地执行这些计算步骤,从而得到可以预期的输出。
在这里插入图片描述

算法的性质

算法的性质:又穷性、确定性、可行性
有穷性:算法必须在计算有限个步骤后终止;
确定性:算法必须没有歧义;
可行性:可以机械地一步一步执行基本操作步骤;

算法的表示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

算法的分析-渐进分析法

课程目标:设计高效的算法、分析算法的效率。
在这里插入图片描述

  1. 分析算法的运行时间-分析算法时间复杂度
  2. 分析算法的内存成本-分析算法空间复杂度
    课程的重点在于分析算法的运行时间

在这里插入图片描述
在这里插入图片描述
然我们对运行时间的分析独立与机器,怎么做呢? 我们可以归纳一些最基础的操作作为基本操作代价,设置均为1。
在这里插入图片描述

统一机器性能后,算法的运行时间依赖于问题输入规模与实例

在这里插入图片描述
在这里插入图片描述
我们发现,最坏情况和最好情况下的输入实例对问题的运作时间是有影响的。我们来看看最好情况。
在这里插入图片描述
对于一般情况,相对来讲对输入的随机分布是有要求的,它的分析比较复杂,需要用到比较多的概率论的基础知识,分析难度也是比较大的,因此我们这课上并不把经历花在这种针对一般情况的平均分析。
在输入实例的影响下,我们通常是用最坏的情况,最坏的实例来对我们的算法进行分析。

在这里插入图片描述
算法的运行时间,在上述分析原则的情况下,既不依赖于具体的机器,也不依赖于输入的实例,它仅依赖于我的输入规模。我的输入规模n便成为了最重要的影响因素。因此,后面的算法运行时间分析,都用n的函数叫做T(n)表示。

那如何用T(n)分析清楚时间复杂度呢?

在这里插入图片描述
在这里插入图片描述
我们发现,当n充分大的时候,两个曲线其实就很接近了。
这是因为这两个函数的最高阶都是相同的。他们两个区别已经不大了。这就导致我们思考,怎么分析地简洁。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在计算机中,由于是二进制的,因此我们见到的log_2(n)简记为logn
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
当函数T(n)的渐进上界和渐进下界恰好相等时,就等于渐进紧确界。

我们用渐进分析法这种工具来分析算法的运行时间,分析出来的结果称之为算法的时间复杂度,通常用渐进记号O(n)表示。

在这里插入图片描述
在这里插入图片描述
如何设计有效的算法呢? 我们分成4篇来进行介绍。
在这里插入图片描述
前三篇是三个通用(不限制数据的结构)的算法设计策略,分而治之、动态规划、贪心策略。
因为图是一种非常通用的数据结构,针对图这种通用的数据结构呢,有一系列算法设计的技巧。
四篇中除了设计有效的算法之外,也包含着若干算法分析的技巧。

  1. 如何去攻克那些比较难的算法问题?
    不会的问题,不要较真,但要坚持学。比如说某个算法或者问题,你1-2个小时想不出来,那么你就放下,明天再想1-2个小时,这样,总有一天,你会灵光一现把问题解决掉。

2.进入企业,无论是课本上的基础的经典算法,还是比赛中求解问题的经验,这些方法和经验在实际应用中他们帮助大不大?他们在您的实际工作中起到一个什么样的作用?
在09年之前的学术界,AI对于编程的要求不高,作为一个AI的研究员,在05-09做研究的时候没怎么用过编程或者数据结构的算法的基础,因为那个时候是小数据,主要在里面去做一些包括统计和最优化方面的研究,如何将小数据做的优美,然后matlab写一点代码跑一下就可以了。但是进入到工业界,我在05年之前的那些经验的积累对于在互联网大数据时代,怎么把算法用好及其关键。因为我可以把做体系架构和作算法的那一批人整合起来。
第二个方面,在比赛的过程当中,你会非常目标导向,我的目标就是拿冠军,围绕着拿冠军这个目标我要做什么事,最关键的五件事是什么等等。我要把这五件事做了。到了工业界其实也是目标导向,每个企业都有自己很核心的目标,要达成这个目标你最重要做哪几件事,这样一个做事的方法论也是非常重要的。
3.算法的基本素养,对于你做决策或者是工作和生活中有什么帮助呢?
今天的人工智能,大家都看到了算法,但是绝大多数人没有关注到人工智能的成本,大企业中用于去跑人工智能算法的服务器的数量都是10万计的,如果每台服务器成本是10万,那么就是100亿,绝大多数企业无法承担,那么算法数据结构和如何搭建更好的体系结构就可以去把成本降下来,这就极其重要。
4.算法是不是您企业(第四范式)的核心竞争力?
一个企业的核心是为客户提供价值。我们就是需要把算法和价值之间建立联系。
5.基本的算法和人工智能的算法有什么区别和联系?
本质上是不同的分支,今天的人工智能主要是建立在概率论的基础之上,概率论通过概率去求解一个最优解。 这个求解最优解的过程恰恰是我们在经典的教科书中看到的过程。

分而治之-递归式求解

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

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

相关文章

Java基础篇01-运算符的使用

01| Java中的数据类型 ) 1. 数值型: 序号类型空间占用说明最小值最大值默认值优缺点对比举例1byte8位有符号整数-128(-2^7)127 (2^7-1)0byte 类型用在大型数组中节约空间,主要代替整数,因为 byte 变量占用的空间只有 int 类型的四分之一by…

6、Denoising Diffusion Probabilistic Models(扩散模型)

简介 主页:https://hojonathanho.github.io/diffusion/ 扩散模型 (diffusion models)是深度生成模型中新的SOTA。 扩散模型在图片生成任务中超越了原SOTA:GAN,并且在诸多应用领域都有出色的表现,如计算机…

【docker概念和实践 1】 基本概念和组成原理

一、说明 初学Docker就一个字:乱!这是因为Docker是一个庞大体系,初学时不了解全貌,处于“盲人摸象”状态,因不能通晓要领,学了一点,过后就忘了。而了解Docker全貌并非易事,官方文档也…

前端学习记录-Javascript

pink JS基础语法JavaScript核心教程阮一峰JS基础 JS基础语法 初识JS JS三种书写位置:行内、内嵌、引入式。单行注释 ctrl/ 多行注释 shift alt a输入输出语句 声明变量 var age;变量命名规范:字母、数字、下划线、美元符号组成,区分大小写…

质量体系搭建

测试团队的发展历程 初期阶段 特点:提供“保姆式”服务,以发现BUG为主要任务。 工作主要:以功能测试、兼容行测试为主的手工测试,每天进行大量的、重复性的工作,即便如此依然会有遗漏。刚起步的测试团队基本处于这个阶…

LeetCode分类刷题----哈希表篇

哈希表哈希表1.有效的字母异位词242.有效的字母异位词383.赎金信49.字母异位词分组438.找到字符串中所有字母异位词2.两个数组的交集349.两个数组的交集350.两个数组的交集||3.快乐数202202.快乐数4.两数之和1.两数之和5.四数相加454.四数相加||6.三数之和15.三数之和7.四数之和…

ARM 实时时钟 RTC

一、何为实时时钟 (1) real time clock,真实时间,就是所谓的xx年x月x日x时x分x秒星期x. (2) RTC是 SoC 中一个内部外设,RTC 有自己独立的晶振提供 RTC 时钟源(32.768KHz),内部有一些寄存器用来记录时间&am…

微信小程序登陆,后端接口实现 - springboot

登录流程 1、通过调用wx.login获取登录凭证(code) uni-app通过调用uni.login 2、前端将code提交给服务器,springboot访问 auth.code2Session,使用 code 换取 openid、unionid、session_key 等信息。 3、完成登录操作&#xff0…

数学计算-C语言实现

任务描述 计算如下公式的值: 其中π=3.1415926 本关知识 C语言常用数学函数及其用法 在使用C语言数学函数时候,应该在该源文件中使用以下命令行包含库文件: #include <math.h> 或 #include "math.h" 本题中用到的C语言数学函数如下: abs函数: 求整型…

Pytorch模型自定义数据集训练流程

文章目录Pytorch模型自定义数据集训练流程1、任务描述2、导入各种需要用到的包3、分割数据集4、将数据转成pytorch标准的DataLoader输入格式5、导入预训练模型&#xff0c;并修改分类层6、开始模型训练7、利用训好的模型做预测Pytorch模型自定义数据集训练流程 我们以kaggle竞…

交互与前端20 APIFunc.DataBase监控

说明 APIFunc.DataBase的第一版有一个监控一直在做agg,造成数据库的无谓消耗,所以一定得修补。在修补的同时,做了一些主要的修改: 1 【自增ID】给Mongo的In和Out增加了数据的自动编号和随机数生成。2 【使用缓存】通过Redis缓存,极大的的减轻了Mongo(主库)的负担这样,使得…

Kruskal重构树学习笔记(C++)

Kruskal重构树学习笔记 提示&#xff1a; 学习Kruskal重构树之前建议先了解一下Kruskal算法&#xff0c;虽然不了解这个影响不会很大 但一定要了解一下并查集的算法 接下来如果想要应用Kruskal重构树&#xff0c;一定要了解一下LCA算法 什么是Kruskal重构树 这里先简单说…

exec函数族详解

文章目录exec介绍exec族execl函数execlp函数execv函数exec介绍 通过命令查看帮助&#xff1a;man 3 exec exec 函数族的作用是根据指定的文件名找到可执行文件&#xff0c;并用它来取代调用进程的内容&#xff0c;换句话说&#xff0c;就是在调用进程内部执行一个可执行文件。…

基于多线程版本的定时器

定时器 1)咱们前面学习过的阻塞队列&#xff0c;相比于普通的队列线程安全&#xff0c;相比于普通的队列起到一个更好的阻塞效果 2)虽然使用阻塞队列&#xff0c;可以达到销峰填谷这样的一个效果&#xff0c;但是峰值中有大量的数据涌入到队列中&#xff0c;如果后续的服务器消…

教程:Flutter 和 Rust混合编程,使用flutter_rust_bridge自动生成ffi代码

实践环境&#xff1a;Arch Linuxflutter_rust_bridge官方文档Flutter环境配置教程 | Rust环境配置教程记录使用flutter_rust_bridge遇到的一些坑。假设已经我们配置了Fluuter与Rust环境现在直接使用flutter_rust_bridge模板创建自己的项目运行&#xff1a;git clone https://gi…

W13Scan 扫描器挖掘漏洞实践

一、背景 这段时间总想捣鼓扫描器&#xff0c;发现自己的一些想法很多前辈已经做了东西&#xff0c;让我有点小沮丧同时也有点小兴奋&#xff0c;说明思路是对的&#xff0c;我准备站在巨人的肩膀去二次开发&#xff0c;加入一些自己的想法&#xff0c;从freebuf中看到W13Scan…

进程调度模块

目录 1.进程介绍 2.进程调度 2.1.进程状态 2.2.进程调度函数 ---schedule 2.3.进程切换函数 ---switch_to&#xff08;&#xff09; 1.进程介绍 在进程模块里面&#xff0c;我们知道了进程就是一个task_struct的结构体&#xff0c;里面含有进程的各种信息。进程存放在进程…

AppScan被动手动探索扫描

系列文章 AppScan介绍和安装 AppScan 扫描web应用程序 第三节-AppScan被动手动探索扫描 被动式扫描&#xff1a;浏览器代理到AppScan&#xff0c;然后进行手工操作&#xff0c;探索产生出的流量给AppScan进行扫描。 他的优点是&#xff1a;扫描足够精准&#xff0c;覆盖率更…

注册中心和负载均衡(黑马SpringCloud笔记)

注册中心和负载均衡 目录注册中心和负载均衡一、服务远程调用1. RestTemplate2. 服务调用关系3. 远程调用的问题二、注册中心1. Eureka注册中心1.1 搭建Eureka注册中心1.2 服务注册1.3 服务拉取1.4 小结2. nacos注册中心2.1Nacos搭建2.2 服务注册2.3 服务拉取2.4 服务分级存储模…

虹科新闻 | 虹科与丹麦Eupry正式建立合作伙伴关系

近期&#xff0c;虹科与丹麦Eupry正式建立合作伙伴关系。未来&#xff0c;虹科与Eupry将共同关注最具创新性和稳定性的解决方案&#xff0c;为客户提供温度记录仪、温湿度记录仪、Mapping温度分布验证服务、以及基于云的温湿度自动监测系统。 虹科非常高兴欢迎并宣布我们的新合…