《计算机算法设计与分析》笔记

news2024/11/16 17:43:12

第一章 算法概述

1.1算法性质:

输入、输出、确定性、有限性

1.2时间复杂度

  1. 上界记号O:如果存在正的常数C和自然数N0,使得当N≧N0时有f(N)≦Cg(N),则f(N)有上界函数g(N),记为f(N)= O(g(N))。

  2. 同阶记号θ:f(N)=θ(g(N))表示f(N)和g(N)同阶 。

  3. 下界记号Ω:如果存在正的常数C和自然数N0,使得当N≧N0 时有f(N)≧Cg(N),则f(N)有下界函数g(N),记为f(N) = Ω(g(N))。

1.3NP完全性理论

P类问题:是指一类能够用确定性算法在多项式时间内求解的判定问题。其实,在非正式的定义中,我们可以把那些在多项式时间内求解的问题当作P类问题。

NP类问题:是指一类可以用不确定性多项式算法求解的判定问题。(不确定性算法:非确定(“猜想”)阶段+确定(“验证”)阶段)

第二章 递归与分治策略 

2.1 递归

递归算法是一个直接或间接地调用自己的算法。

例1:阶乘函数

int  fac(int n)
{ if (n==0) return 1;
  return n*fac(n-1);
}

 例2:Hanoi塔问题。

汉诺塔问题可以通过以下三个步骤实现:

(1)将塔A上的n-1个碟子借助塔C先移到塔B上。

(2)把塔A上剩下的一个碟子移到塔C上。

(3)将n-1个碟子从塔B借助塔A移到塔C上。  

void move(char x,char y)
{
    printf("%c->%c\n",x,y);
}

void hanoi(int n, char a, char b, char c){
    if (n == 1) move(a,c);
    else 
    {                                              
        hanoi(n-1, a, c, b); 
        move(a,c);                         
        hanoi(n-1, b, a, c);             
}

例3:多变元递归——整数划分问题

例:整数划分问题:将一个正整数n表示为一系列正整数之和,n = n1 + n2 +…+nk    其中n1≥n2≥…≥nk≥1, k≥1。

 例如 p(6) = 11 ,即整数6的划分数为11种:  

6, 5+1, 4+2, 4+1+1,  3+3, 3+2+1, 3+1+1+1,  2+2+2, 2+2+1+1, 2+1+1+1+1, 1+1+1+1+1+1

最简单情形:(1) q(n, 1)=1,q(1, m) =1 n, m≥1;

递归关系: (2) q(n, n) = 1 + q(n, n–1),n>1;

产生的新情况: (3) q(n, m) = q(n, m–1) + q(n–m, m),  n>m>1          

划分中不含m的情况  划分中含m的情况 (4) q(n, m) = q(n, n),  n<m。

例4:多步递归——Fibonacci数列 

 

2.2分治法

解型为T(n)=aT(n/b)+O(nd)的递归方程

设a>=1和b>1是常数,f(n)是一个函数,

T(n)是定义在非负整数集上的函数:T(n)=aT(n/b)+ O(nd)

例1:二分搜索技术

int BinarySearch(Type a[ ], const Type &x, int n)
{
     int left=0;int right=n-1;
     while (left <= right ){ 
        int middle = (left+right)/2;
        if (x == a[middle]) return middle;
        if (x < a[middle]) right = middle-1; 
        else left = middle+1;
        }
    return -1;
}

例2:大整数的乘法

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

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

相关文章

OpenAI 联合 SWE 发布 AI 软件工程能力测试集,Gru.ai 荣登榜首

在 9 月 3 日&#xff0c;Gru.ai 在 SWE-Bench-Verified 评估最新发布的数据中以 45.2% 的高分排名第一。SWE-Bench-Verified 是 OpenAI 联合 SWE 发布测试集&#xff0c;旨在更可靠的评估 AI 解决实际软件问题的能力。该测试集经由人工验证打标&#xff0c;被认为是评估 AI 软…

机器学习之 SVD降维:图像压缩示例

引言 在处理大规模数据集时&#xff0c;数据降维是一项非常重要的任务。通过降维&#xff0c;我们可以减少数据的存储需求、加快计算速度&#xff0c;并且在某些情况下还能提高模型的性能。SVD&#xff08;Singular Value Decomposition&#xff0c;奇异值分解&#xff09;是一…

《垃圾回收的算法与实现》-算法-摘抄

本文是书籍《垃圾回收的算法与实现》的摘抄&#xff0c;不涉及算法源码及步骤讲解模块。 预备 对象由头(header)和域(field)构成。 头&#xff1a;对象中保存对象本身信息的部分&#xff0c;主要含有以下信息&#xff1a;对象的大小和种类。 域&#xff1a;对象使用者在对象…

cocosCreator实现一个验证码弹窗验证功能

公开文章地址 在 Cocos Creator 中实现一个6位数的验证码输入弹窗功能。主要包含以下三点 1、 可以连续输入验证码 2、 可以粘贴验证码 3、 可以连续删除验证码 前言 引擎版本: Cocos Creator 2.7.2 开发语言: ts 效果图 实现思路 1、 在弹窗界面放置6个输入框的精灵,每个精…

各种无人机飞行服务技术详解

随着科技的飞速发展&#xff0c;无人机&#xff08;Unmanned Aerial Vehicles, UAVs&#xff09;技术已成为推动多个行业变革的重要力量。从军事侦察到商业应用&#xff0c;再到日常生活中的娱乐拍摄&#xff0c;无人机的身影无处不在。本文将详细解析无人机飞行服务所涉及的关…

【OpenCV-图像形态学操作】礼帽与黑帽、梯度运算、开运算与闭运算、形态学-膨胀操作、形态学-腐蚀操作

1 形态学-腐蚀操作 import cv2 img cv2.imread(./img/dige.png)cv2.imshow(img, img) cv2.waitKey(0) cv2.destroyAllWindows()# 创建一个 3x3 的结构元素&#xff08;内核&#xff09; # np.ones() 函数用于生成一个指定形状的数组&#xff0c;其中所有的元素都初始化为 1# …

服务器深度解析:五大关键问题一网打尽

在科技飞速发展的今天&#xff0c;服务器的重要性不言而喻。但对于服务器的一些关键问题&#xff0c;你真的清楚吗&#xff1f;今天&#xff0c;我们就来为大家深度解析服务器的五大关键问题&#xff0c;满满的干货知识&#xff0c;让你轻松了解服务器的奥秘。 一、“路” 与 …

NS3的3.36版本将Eclipse作IDE

1 配置Eclipse 1.1 安装JDK JDK的tar包下载传送门 下载之后&#xff0c;在当前目录解压&#xff08;以jdk1.8.0_333为例&#xff09;。 sudo mkdir /usr/lib/jvm # 在/usr/lib/jvm目录下新建目录 sudo mv jdk1.8.0_333 /usr/lib/jvm # 将解压的文件移动到我们的新建目录下…

Re-ReST: Reflection-Reinforced Self-Training for Language Agents论文学习

文章首先提到了一个推理-动作轨迹数据集的问题。这些数据集经常会包括一些需要多步推理的任务。但是&#xff0c;无论是让人去取得这些数据&#xff0c;还是让更高质量的模型代劳&#xff0c;成本都太高了。因此最好是自我监督&#xff0c;自己产生数据来学习&#xff08;self-…

在Excel中通过Python运行公式和函数实现数据计算

目录 一、引言 1.1 背景介绍 1.2 Python in Excel 的意义 二、环境准备 2.1 安装必要的软件 2.2 配置 Excel 三、基础操作 3.1 输入 Python 代码 3.2 调用 Python 库 四、案例分析 4.1 数据读取与处理 4.1.1 读取 Excel 数据 4.1.2 数据处理 4.2 数据可视化 4.2…

SprinBoot+Vue学生信息管理系统的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍&#xff1a;CSDN认证博客专家&#xff0c;CSDN平台Java领域优质…

【信息论与编码原理】自学成才还在学ing

绪论 多的咱不写&#xff0c;只写干干的 点对点通讯系统模型 干扰和噪声不可避免 消息是 信息的载体&#xff0c;消息包含信息&#xff0c;是具体的非物理的 信息是有效的data 信号是 适合信道传输的物理量&#xff0c;可携带消息&#xff0c;可以显示或者描述 香农信息定义…

Java重修笔记 第五十二天 Junit

Junit 的使用 1. 为了方便程序员测试某一个方法而使用 2. 在方法上面加上 Test 并引用 5.X 版本 3. 就能在方法前面看到可运行的按钮 public class Homework07 {public static void main(String[] args) {}Testpublic void testList() {DAO<User> dao new DAO<&g…

大数据与人工智能:脑科学与人工神经网络ANN

文章目录 大数据与人工智能&#xff1a;脑科学与人工神经网络ANN一、引言ANN简介研究背景与应用领域发展背景应用场景 二、ANN背后的人脑神经网络人脑神经网络的专业描述神经元的结构信号处理 思考和认知过程认知功能的实现 对机器学习算法的启示 三、ANN的研究进展初始阶段&am…

通过docker overlay2目录名查找容器名和容器ID

有时候经常会有个别容器占用磁盘空间特别大&#xff0c;这个时候就需要通过docker overlay2 日录名查找对应容器名. 1.首先进入到 /var/lib/docker/overlay2 目录下 # cd /var/lib/docker/overlay2 2.查看谁占用容间最大 # du -h -d 1 | grep G |sort -nr 3.再通过目录名查找…

存储课程学习笔记4_设计数据结构管理nvme磁盘(基于已经通过struct nvme_user_io和ioctl实现了对nvme设备的读写)

已经测试了直接操作nvme磁盘的方式&#xff0c;那么基于可以读写nvme磁盘的功能&#xff0c;如何扩展呢。 通过struct nvme_user_io结构体ioctl实现对nvme磁盘的读写访问&#xff0c;可以定义结构&#xff0c;对整个磁盘进行管理&#xff0c;以配合业务进行衍生功能。 0&…

使用Idea新建一个Demo项目基于WebApp目录下的服务器访问测试-作业篇

文章目录 前言一、Maven环境搭建二、创项目总结 前言 例如&#xff1a;第一堂JAVAweb 轻量级的项目搭建运行作业。 一、Maven环境搭建 环境变量配置 新建系统变量 MAVEN_HOMEC:\apache-maven-3.6.3path后边加上 %MAVEN_HOME%\bin然后控制台cmd 检查变量配置是否完全 mvn -v…

ABC 370 E - Avoid K Partition

原题链接&#xff1a;E - Avoid K Partition 题意&#xff1a;给长度为n的数组&#xff0c;将数组划分成任意份&#xff0c;但是每一份的总和都不能是k&#xff0c;问有多少种分割方法。 思路&#xff1a;dp&#xff0c;f[i]&#xff0c;代表前i个元素满足题意的划分的总和&a…

申请Shopify PayPal账号的时间和所需资料如下

申请流程 注册账户&#xff1a; 访问 PayPal官网。点击右上角的“注册”按钮&#xff0c;选择“企业账户”。输入电子邮箱地址和密码&#xff0c;点击“继续”。填写公司信息&#xff1a; 提供公司名称、营业执照地址、联系方式等信息。确保公司名称与营业执照上的名称一致。填…

1.2 半导体二极管笔记

文章目录 一、符号二、 伏安特性1、正向特性2、反向特性3、反向击穿特性 二、二极管的主要参数1、最大整流电流 I F I_F IF​2、反向击穿电压 U B R U_{BR} UBR​3、反向饱和电流 I S I_S IS​4、最高工作频率 f m f_m fm​5、极间电容 C d C_d Cd​ 四、二极管的测试1、二极管…