【算法】算法设计与分析 课程笔记 第一章 概述

2023-09-13 23:47:59

第一章 算法概述

算法的性质

算法的四个性质:输入、输出、确定性和有穷性

算法的时间复杂度

1. 常见的时间复杂度

  1. 常数阶 O(1)

  2. 对数阶 O(log n)

  3. 线性阶 O(n)

  4. 线性对数阶 O(nlog n)

  5. 平方阶 O(n^2)

  6. 立方阶 O(n^3)

  7. k 次方阶 O(n^k)

  8. 指数阶 O(2^n)

注:上面的 log n 均代表以2为底的对数。

2. 时间复杂度排序

常见的算法时间复杂度由小到大依次为:

Ο(1)<Ο(log n)<Ο(n)<Ο(nlog n)<Ο(n^2)<Ο(n^3)< Ο(n^k) < Ο(2^n)

 随着问题规模n的不断增大,上面时间复杂度的值也不断增大,算法的执行效率越来越低。

PTA习题选讲

单选题

虽然没难度,但是考了各种复杂度的排序,警醒我需要把那一串背下来!

O(1)< O(log n)< O(n)< O(nlog n)< O(n^2)< O(n^3)

灵机一动,直接用2代入也可以!其实就是考函数的大小罢了!

 填空题

假设某算法在输入规模为n时的计算时间为T(n)=3∗2^n

在某台计算机上实现并完成该算法的时间为 t 秒

现有另一台计算机,其运行速度为第一台的64倍

那么在这台新机器上用同一算法在 t 秒内能解决问题的输入规模为(    )。

如果算法计算时间改进为T(n)=n^2,其余条件不变,

则新机器上用 t 秒可以解决问题的输入规模为(   )。

第一小问,因为两台机器的共同变量只有时间t,所以从t入手,

因为新机器的速度是旧机器的64倍,所以新机器用t秒时间解决的问题规模是旧机器的64倍

∴可得:T’(n) = 64*T(n) = 64*3*2^n = 3*2^(n+6)

问题规模和输入规模是不同的概念,所以新机器的输入规模应该是 n+6 

第二小问,同理,只需要把上式的T(n)换为n^2:

T’(n) = 64*T(n) = 64*n^2 = (8*n)^2

故在这个条件下输入规模则为 8*n

更多推荐

4 vCPU 实例达成 100 万 JSON API 请求/秒的优化实践

“性能工程”(Performanceengineering)是个日渐流行的概念。顾名思义“性能工程”是包含在系统开发生命周期中所应用的一个技术分支,其目的就是确保满足非功能性的性能需求,例如:性能、可靠性等。由于现代软件系统变得日益复杂,我们在对抗性能这个凸显的挑战的时候往往显得无措手足,或者照本宣科的尝试一些偏方,寄

人脸修复祛马赛克算法CodeFormer——C++与Python模型部署

一、人脸修复算法1.算法简介CodeFormer是一种基于AI技术深度学习的人脸复原模型,由南洋理工大学和商汤科技联合研究中心联合开发,它能够接收模糊或马赛克图像作为输入,并生成更清晰的原始图像。算法源码地址:https://github.com/sczhou/CodeFormer这种技术在图像修复、图像增强和隐私保护

OceanBase开源获信通院认可:开源300万行核心代码、社区答疑超3万次

昨日,在由中国信息通信研究院主办的“2023OSCAR开源产业大会”上,蚂蚁集团旗下的自研原生分布式数据库OceanBase荣获“2023OSCAR尖峰开源项目”、“2023OSCAR尖峰开源企业(开源运营与生态建设)”两个奖项。同时,完成可信开源社区评估,获得“可信开源社区”评估证书。OceanBase自2021年6

从0搭建夜莺v6基础监控告警系统(二):采集数据、打通夜莺显示

文章目录1.写在前面1.1.categraf采集数据1.2.官方文档传送门2.配置过程2.1.打通夜莺和VictoriaMetrics2.2.配置Categraf2.3.验证结果2.4.配置仪表盘3.部署总结3.1.操作总结3.2.仪表盘展示上一操作我们已经安装好了所需的基础服务,接下来需要打通各组件之间的数据推送和监

Kubernetes Dashboard安装部署

KubernetesDashboard安装部署1.下载Dashboard部署文件2.修改yaml配置文件3.应用安装,查看pod和svc4.创建dashboard服务账户5.创建admin-user用户的登录密钥6.登录6.1使用token登录(1)短期token(2)token长期有效6.2使用Kubeconfig文

Pyppeteer中文文档

介绍Pyppeteer是PuppeteerJavascript(无头)chrome/chromium浏览器自动化库的Python非官方端口,Puppeteer是在Node.js中使用的,而Pyppeteer是专用于Python语言的。本文档对应的是Pyppeteer的v0.0.25版本,从目前情况来看,Pyppetee

手机无人直播手机用哪些软件系统最好?

最近手机无人直播可是风靡大江南北,只要是一个抖音用户都想装个手机无人直播软件,随时随地开启手机无人直播,抖音8亿用户想想这个市场得有多大,蛋糕有多肥。那么问题来了,手机无人直播手机用啥软件?推荐:魔棒直播这里有多个理由我们还必须要选择它;1.因为手机无人直播软件,目前市面上清一色仅支持安卓版,支持苹果版的只有“魔棒直播

第2讲:Vue开发环境的搭建及运行

Vue开发环境搭建步骤1、安装nodehttp://www.nodejs.com.cn/一般安装在根目录下,直接下一步下一步安装即可。如何检测安装完毕node-v2、第二步:安装vue-cli脚手架npminstall-g@vue/cli,查看安装版本vue--version3、第三步:项目创建vuecreate项目名

软考复习 -- 计算机网络

1网络互连设备物理层:中继器和集线器(多路中继器)数据链路层:网桥和交换机(多端口网桥)网络层:路由器应用层:网关2广播域和冲突域3协议簇4网际层协议4TCP和UDP4.1TCP传输层协议——TCP:面向连接可靠的传输层协议,采用三次握手建立和关闭连接TCP的功能或服务有:可靠传输、连接管理、差错校验和重传、流量控制、

4-3 nn.functional和nn.Module

一,nn.functional和nn.Module前面我们介绍了Pytorch的张量的结构操作和数学运算中的一些常用API。利用这些张量的API我们可以构建出神经网络相关的组件(如激活函数,模型层,损失函数)。其实:Pytorch和神经网络相关的功能组件大多都封装在**torch.nn**模块下。这些功能组件的绝大部分

47个Docker常见故障的原因和解决方式

本文针对Docker容器部署、维护过程中,产生的问题和故障,做出有针对性的说明和解决方案,希望可以帮助到大家去快速定位和解决类似问题故障。Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:1、通过dockerrun执行命令,或许返回信息2、通过dockerlogs去获取日志,做有针对性的筛选3、

热文推荐