算法导论 | 算法在计算中的作用

news2025/1/12 19:43:28

第一章 | 算法在计算中的作用

笔记

什么是算法?

  • 算法就是任何良定义的计算过程,该过程取某个值或值的集合作为输入并产生某个值或值的集合作为输出
  • 不正确的算法只要其错误率可控有时可能是有用的
  • 算法的说明的唯一要求是这个说明必须精确描述所要遵循的计算过程

什么是数据结构?

  • 数据结构是一种存储和组织数据的方式

什么是NP完全问题?

  • NP完全问题是指一类被认为在多项式时间内难以求解的问题。

    具体来说,NP完全问题指的是所有可以在非确定性多项式时间(NP)内解决的问题,也就是说可以在多项式时间内验证一个解的正确性,但在多项式时间内却难以找到一个解。如果一个问题被证明为是NP完全问题,那么这个问题很可能是无法被高效解决的,因为在目前的算法研究中,还没有发现一种可以在多项式时间内解决所有NP完全问题的算法。

练习题

给出现实生活中需要排序的一个例子或者现实生活中需要计算凸壳1的一个例子

  • 图书分类。图书馆中可能有数百万本书籍,它们需要按照特定的规则进行分类以方便读者查找。一种常见的分类方法是按照书的主题分类,比如历史、文学、科学等。对于每个主题,书籍需要按照作者、标题、出版日期等信息排序,以便读者可以快速找到自己需要的书籍。在这种情况下,需要对每个主题下的书籍进行排序,以便读者可以方便地找到需要的书籍。

  • 航空管制。航空管制需要监视和管理空中飞行器的运动。航空器需要遵循特定的路径和航线,以保证安全和效率。凸壳可以用于确定航空器运动的边界,以便航空管制员可以更好地监视和管理它们。通过将所有飞机的位置投影到地图上,并计算它们的凸壳,航空管制员可以确定飞机的移动边界,从而更好地管理和协调航班。

除速度外,在真实环境中还可能使用哪些其他有关效率的量度?

  1. 空间复杂度:算法使用的内存空间也是一个非常重要的效率指标。在许多场景中,内存使用可能比计算时间更重要,因此优化算法的空间复杂度是很有意义的。
  2. 响应时间:某些场景下,算法必须能够实时响应,例如金融交易和游戏等。在这些情况下,算法的响应时间是非常重要的。
  3. 并发性:在一些应用场景中,同时处理多个请求是必要的。因此,算法的并发性也是一个重要的指标,它衡量算法在同时处理多个请求时的效率。
  4. 可维护性:算法的可维护性也是一个非常重要的指标,它衡量算法在代码调试、修复错误和添加新特性等方面的效率。高度可维护性的算法可以降低开发和维护成本,从而提高整体效率。
  5. 可扩展性:在某些场景中,算法必须能够适应不断增长的数据量和用户量。因此,算法的可扩展性也是一个重要的指标,它衡量算法在面对大规模数据和用户时的效率。
  6. ……

选择一种你以前已知的数据结构,并讨论其优势和局限

以数组为例。

优势:

  1. 随机访问:数组可以通过索引随机访问,也就是说可以直接访问任意元素,时间复杂度为O(1)。
  2. 连续的内存空间:数组中的元素在内存中是连续的,这意味着访问数组中的元素是非常快的。
  3. 内存缓存:由于数组的元素是连续的,所以当访问一个元素时,其周围的元素也会被加载到内存中,这种内存缓存可以提高访问效率。
  4. 容易实现:数组是一种非常简单和易于实现的数据结构,它只需要分配一段连续的内存空间即可。

劣势:

  1. 大小固定:数组在创建时需要指定大小,一旦创建后,大小就不能改变。如果需要动态调整数组的大小,就需要重新分配一段更大的内存空间,然后将原有的元素复制到新的空间中。
  2. 插入和删除效率低:如果需要在数组中插入或删除元素,就需要将插入或删除点之后的所有元素向后或向前移动,这个操作的时间复杂度为O(n)。
  3. 浪费内存空间:如果数组大小是固定的,而且使用不到数组的所有元素,这些空间就会浪费掉。在某些场景中,这种内存浪费可能是不可接受的。
  4. 数组索引下标易越界:数组下标越界是一个常见的错误,如果没有进行检查和处理,可能会导致程序崩溃或者产生不可预料的结果。

最短路径与旅行商问题有哪些相似之处,又有哪些不同?

最短路径问题和旅行商问题都是著名的图论问题,它们都是求解图中所有顶点对之间的最短路径或者一组顶点的最优遍历路径。下面是这两个问题的相似之处和不同之处:

相似之处:

  1. 都是图论问题:最短路径问题和旅行商问题都是图论中的经典问题,都涉及到在图中找到最优路径或最优遍历路径。
  2. 优化问题:最短路径问题和旅行商问题都是优化问题,需要找到满足一定条件下的最优解,例如最短路径或最优遍历路径。

不同之处:

  1. 问题目标不同:最短路径问题的目标是找到两个顶点之间的最短路径,而旅行商问题的目标是找到一条遍历所有顶点的最短路径。
  2. 算法复杂度不同:在完全图中,旅行商问题的时间复杂度是指数级的,而最短路径问题的时间复杂度是多项式级别的。
  3. 问题性质不同:最短路径问题是一个单源最短路径问题,它的目标是找到一个顶点到其他所有顶点的最短路径,而旅行商问题是一个TSP问题,需要找到一条遍历所有顶点的最短路径。
  4. 求解方法不同:最短路径问题可以使用经典的Dijkstra算法或者Floyd算法求解,而旅行商问题则需要使用更加复杂的算法,例如贪心算法、动态规划或遗传算法等。

提供一个现实生活的问题,其中只有最佳解才行,然后提供一个问题,其中近似最佳的一个解也足够好

一个只有最佳解才行的现实生活问题是电路布线问题。在电路设计中,电路布线问题是一个非常重要的问题。它的目标是在给定的空间中,将电路中的各个元件之间的电线连接起来,使得电路性能最佳。这个问题的解必须是最佳的,因为如果电路布线出现错误,可能会导致电路性能下降,甚至损坏电路。

一个近似最佳的解也足够好的问题是货车路径规划问题。在现实生活中,物流公司需要规划货车的路径以最大化利润并最小化成本。虽然在理论上,最佳解是遍历所有可能路径以找到最短路径,但这是不现实的。因此,现实生活中,通常使用启发式算法来近似解决这个问题。即使是近似最佳的解决方案,也可以大大提高货车的效率并节省成本。

给出在应用层需要算法内容的应用的一个例子,并讨论涉及算法的功能

在应用层上的算法指的是在特定的应用中,根据应用需求和特点设计和实现的算法。这些算法通常用于解决特定领域中的问题,并与该领域的相关知识和实践相结合。

应用层算法的特点是:它们通常被设计用来解决具体问题,例如图像处理、语音识别、搜索引擎等。这些算法可以基于一些通用的算法技术进行设计,例如排序、搜索、图论等,但是在实践中它们会被优化和改进以适应特定的应用场景。

例如,在金融领域中,算法被广泛应用于股票预测、交易优化、信用风险评估等方面;在医疗领域中,算法被应用于医学影像处理、病理分析、药物设计等方面;在自然语言处理领域中,算法被应用于文本分类、机器翻译、情感分析等方面。

对规模为 n n n的输入,插入排序运行 8 n 2 8n^2 8n2步,而归并排序运行 64 n l g n 64nlgn 64nlgn步,请问对哪些 n n n值,插入排序优于归并排序?

假设插入排序的运行时间为 T 1 T_1 T1,归并排序的运行时间为 T 2 T_2 T2,则有:

T 1 = 8 n 2 T_1 = 8n^2 T1=8n2

T 2 = 64 n l o g n T_2 = 64nlogn T2=64nlogn

要求 T 1 < T 2 T_1 < T_2 T1<T2,即 8 n 2 < 64 n l o g n 8n^2 < 64nlogn 8n2<64nlogn

将两边同时除以 8 n 8n 8n得到 n < 8 l o g n n < 8logn n<8logn,即插入排序优于归并排序的n的取值范围是 n < 8 l o g n n < 8logn n<8logn

为了确定具体的取值范围,我们可以利用Python代码画出这两个函数的图像(详细代码参见附录A),如下所示:

请添加图片描述

可以看到,当 n ≤ 43 n≤43 n43 时,插入排序的运行时间小于归并排序的运行时间。因此,当 n n n的取值小于等于 43 43 43时,插入排序优于归并排序。

n n n的最小值为多少时,运行时间为 100 n 2 100n^2 100n2 的一个算法在相同机器上快于运行时间为 2 n 2^n 2n的另一个算法

假设 T 1 = 100 n 2 T_1 = 100n^2 T1=100n2 T 2 = 2 n T_2 = 2^n T2=2n

要求 T 1 < T 2 T_1 < T_2 T1<T2,即 100 n 2 < 2 n 100n^2 < 2^n 100n2<2n

为了确定具体的取值范围,利用Python代码画出这两个函数的图像(详细代码参见附录B),如下所示:
在这里插入图片描述

当 n 达到 14.26 时, 100 n 2 100n^2 100n2 和$ 2^n$ 的运行时间相等,此时 100 n 2 100n^2 100n2 的运行时间小于 2 n 2^n 2n。因此,在相同的机器上,当 n n n 大于 14.26 时,运行时间为 100 n 2 100n^2 100n2 的算法比运行时间为 2 n 2^n 2n 的算法更快。

附录A

/*插入排序和归并排序比较 */
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.font_manager import FontProperties

# 指定中文字体
font = FontProperties(fname=r'C:\Windows\Fonts\simhei.ttf', size=14)

# 定义函数
def f1(n):
    return 8 * n**2

def f2(n):
    return 64 * n * np.log2(n)

# 画图
n = np.arange(2, 101)
plt.plot(n, f1(n), label='插入排序')
plt.plot(n, f2(n), label='归并排序')
plt.xlabel('n', fontproperties=font)
plt.ylabel('运行时间', fontproperties=font)
plt.legend(prop=font)
plt.show()

附录B

/*同一台机器上,100n^22^n的比较 */
import matplotlib.pyplot as plt
import numpy as np

# 定义两个函数
def f1(n):
    return 100 * n ** 2

def f2(n):
    return 2 ** n

# 生成 n 的范围和对应的函数值
n = np.arange(1, 15)
y1 = f1(n)
y2 = f2(n)

# 画图
plt.plot(n, y1, label='f1(n) = 100n^2')
plt.plot(n, y2, label='f2(n) = 2^n')

# 图像标注
plt.xlabel('n')
plt.ylabel('f(n)')
plt.title('Comparing two functions')
plt.legend()

# 显示图像
plt.show()

  1. 在算法中,凸壳是指一个包含点集中所有点的最小凸多边形或凸包的边界。凸壳问题是计算机几何学中的基本问题,具有广泛的应用。凸壳问题可以用于诸如图像处理、计算机视觉、机器学习、自动化、地理信息系统等领域中。
    像标注 ↩︎

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

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

相关文章

datax 从oracle迁移到es中

任务启动时刻 : 2023-04-20 19:34:56 任务结束时刻 : 2023-04-20 19:56:22 任务总计耗时 : 1285s 任务平均流量 : 5.07MB/s 记录写入速度 : …

离散型制造企业如何选择MES系统

随着MES系统越来越被企业所重视&#xff0c;并并被运用到很多不同行业的制造业中。 MES对于制造企业来说&#xff0c;其所需要的要求是各不相同的&#xff0c;比如离散型制造企业&#xff0c;该如何去选择MES系统呢&#xff1f; 什么是离散型制造企业&#xff1f; 离散型制造企…

nn.init.xavier_uniform_()的作用:根据均匀分布生成Tensor

官网解释如下&#xff1a; Signature: nn.init.xavier_uniform_(tensor: torch.Tensor, gain: float 1.0) -> torch.Tensor Docstring: Fills the input Tensor with values according to the method described in Understanding the difficulty of training deep feedforw…

PHP语言开发的医院不良事件上报系统源码,前后端分离,仓储模式

医院安全&#xff08;不良&#xff09;事件上报系统源码 系统定义&#xff1a; 规范医院安全&#xff08;不良&#xff09;事件的主动报告&#xff0c;增强风险防范意识&#xff0c;及时发现医院不良事件和安全隐患&#xff0c;将获取的医院安全信息进行分析反馈&#xff0c;…

STM32开发(十五)STM32F103 片内资源 —— 通用定时器 PWN 无源蜂鸣器 详解

文章目录 一、基础知识点二、开发环境三、STM32CubeMX相关配置四、Vscode代码讲解五、结果演示 一、基础知识点 本实验通过STM32F103 的通用定时器 PWN功能&#xff0c;实现对无源蜂鸣器控制。 本实验内容知识点&#xff1a; 1、通用定时器 PWN 详解 2、有源蜂鸣器和无源蜂鸣器…

当我开始学习人工智能:知识表示方法

加油加油&#xff0c;五一前复习玩&#xff0c;五一就可以出去玩啦 一、状态空间法&#xff08;State Space Representation&#xff09; 问题求解技术主要是两个方面 问题的表示求解的方法 状态空间法 状态算符状态空间方法 1.1 问题状态描述 定义 状态&#xff1a;描述某类不…

电感耦合等离子体原子发射光谱法(ICP-AES)

一、定义 电感耦合等离子体原子发射光谱法(ICP-AES)&#xff0c;是以电感耦合等离子矩为激发光源的光谱分析方法&#xff0c;具有准确度高和精密度高、检出限低、测定快速、线性范围宽、可同时测定多种元素等优点&#xff0c;国外已广泛用于环境样品及岩石、矿物、金属等样品中…

SimpleDateFormat模式字符串格式

SimpleDateFormat模式字符串 new SimpleDateFormat(String parm); parm为一个字符串,表示格式. 时间模式 字母 时间元素 表示 示例 y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 D 年中的天数 Number 200 d 月份中的天数 Number 31;30;28;29 H 一天中的小时(24小时…

【MySQL】表的基本操作

1、数据类型 1.1 数值类型 数据类型大小说明bit[(M)]M指定位数&#xff0c;默认为1二进制&#xff0c;M范围从1到64&#xff0c;存储数值范围从0到2^M-1tinyint1字节smallint2字节int4字节bigint8字节float(M,D)4字节单精度&#xff0c;M指定长度&#xff0c;D 指定小数位数&am…

Peach Fuzzer漏洞挖掘实战

概述 本文主要介绍模糊测试技术&#xff0c;开源模糊测试框架Peach Fuzzer&#xff0c;最后使用Peach Fuzzer对Modbus Slave软件进行漏洞挖掘&#xff0c;并成功挖掘到0DAY漏洞。&#xff08;文中涉及的漏洞已提交到国家漏洞库&#xff0c;现已修复&#xff09; 模糊测试技术 模…

电影《绿皮书》鉴赏

**《绿皮书》**由彼得法雷尔执导&#xff0c;维戈莫滕森和马萨拉阿里主演&#xff0c;改编自关于保镖托尼的真实故事。20世纪60年代&#xff0c;美国的种族关系紧张&#xff0c;黑人音乐家很少有机会演出。作为当时为数不多的黑人钢琴家之一&#xff0c;唐参加了许多音乐会巡演…

[chapter27][PyTorch][visdom]

前言&#xff1a; Visdom是Facebook专为PyTorch开发的实时可视化工具包&#xff0c;相当于TensorFlow中的Tensorboard&#xff0c;灵活高效且界面美观。 目录&#xff1a; 1&#xff1a; 环境安装 2&#xff1a; 参数简介 3&#xff1a; 监听单一数据 4&#xff1a; 监听多个数…

晶振电路并联一个电阻作用

晶振电路并联一个电阻的作用 前言 在设计电路时&#xff0c;通常看到一些主控的外部高速晶振并联了一个1MΩ的电阻&#xff0c;但是发现有的电路不用也可以正常工作&#xff0c;对这个就有点好奇啦&#xff1f; 电路图如下&#xff1a; 实际上晶振电路在工作时没有并联一个1…

如何使用Sublime来规范化代码的格式,让代码更加规范整齐,批量修改代码

如何使用Sublime来规范化代码的格式&#xff0c;让代码更加规范整齐&#xff0c;批量修改代码 设备/引擎&#xff1a;Mac&#xff08;11.7&#xff09;/cocos 开发工具&#xff1a;Sublime Text 开发语言&#xff1a;c/java 代码开发中经常需要将代码进行规范化处理&#x…

PHP +python+nodejs+springboot+vue 校园电子资料资源管理系统

能实现不出家门就可以通过网络进行系统管理&#xff0c;交易等&#xff0c;而且过程简单、快捷。同样的&#xff0c;在人们的工作生活中&#xff0c;也就需要互联网技术来方便人们的日常工作生活&#xff0c;实现工作办公的自动化处理&#xff0c;实现信息化&#xff0c;无纸化…

js录音支持h5 pc ios android

最近在做h5录音的页面要求可暂停录音,继续录音&#xff0c;写好后发现不兼容ios,无奈只能找兼容方法&#xff0c;找了一天也没找到&#xff0c;后来看到一个网站在ios上可以暂停录音&#xff0c;后来引入他的js文件果然能用了 网站放下面了 Recorder H5: 用于html5网页中的前…

ASP.NET ZERO Crack坚实的体系结构

ASP.NET ZERO Crack坚实的体系结构 据说ASP.NET ZERO是互联网应用程序新流程的起点&#xff0c;该流程包含现代用户界面&#xff0c;具有强大的体系结构和完整的源代码。它可以通过提供共享的应用程序来节省用户时间&#xff0c;这些应用程序是visual studio预构建解决方案所必…

PostMan笔记(一)简介+安装和设置

1. PostMan简介 Postman 是一款功能强大的 API 开发工具&#xff0c;支持多种 HTTP 请求方法和测试断言&#xff0c;能够快速调试和测试 API 接口&#xff0c;提高开发效率。本文将介绍 Postman 工具的使用方法。 安装和设置 首先&#xff0c;需要下载和安装 Postman 工具。…

[ChatGPT]-02-ChatGPT对安全的影响和开源的LLM大模型资源汇总

文章目录 0.ChatGPT大模型带来的影响0.1 ChatGPT带来信息化革命性创新&#xff0c;目前尚不能处理专业知识但成长很快0.2 Chat GPT为网安行业带来新的创新方向&#xff0c;也将引领新一轮投融资热潮0.2.1 攻击方发起网络攻击的门槛降低0.2.2 防守方合理使用ChatGPT可大幅减少安…

零基础入门前端--JavaScript 循环结构语句

循环控制 控制程序重复执行若干次相同或似的逻辑&#xff0c;理解并正确使用循环控制&#xff0c;需要搞清楚循环的3个要素&#xff1a;起始值、变化量、终止条件。 ○ 起始值循环的起点&#xff0c;可以是【任意数据类型值】 ○ 变化量是指【改变起始值的方式】 ○ 终止条…