当前位置: 首页 > news >正文

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

第一章 算法概述

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.lryc.cn/news/434426.html

相关文章:

  • 智能指针怎么就智能了?
  • mysql 限制用户登录次数超过3次就 锁定账户在一段时间内不运行操作
  • 深度学习中的常用线性代数知识汇总——第二篇:行列式、逆矩阵、特征值与特征向量
  • 《MaPLe: Multi-modal Prompt Learning》中文校对版
  • MFC修改控件ID的详细说明
  • MySQL高可用配置及故障切换
  • AI模型一体机:智能办公的未来
  • jina的Embedding Reranker
  • Prompt Engineer: 使用Thought来提升LLM的回复能力
  • tekton构建标准ci(clone repo, test, build push img)
  • 【电力系统】复杂网络分析在电力系统规范中的应用
  • CDGA|推动数据治理与传统产业深度融合:策略与实践路径
  • 【FastAPI】离线使用Swagger UI 或 国内网络如何快速加载Swagger UI
  • Linux:从入门到放弃
  • SVM 监督学习
  • 奖励模型的训练
  • Ubuntu22.04之禁止内核自动更新(二百六十八)
  • kaggle题-房价预测(Pytorch),手把手教,全文代码解释
  • PulseSensor心率传感器详解(STM32)
  • NISP 一级 | 3.1 网络基础知识
  • 模拟网络丢包常用方法以及工具
  • ABC 370 E - Avoid K Partition
  • C++: set与map容器的介绍与使用
  • 单片机-STM32 看门狗(八)
  • iOS 18.1将上线新功能,可惜这波国内的小伙伴无缘了
  • MySQL中DML操作(二)
  • LLMs技术 | 整合Ollama实现本地LLMs调用
  • 【C-实践】文件服务器(3.0)
  • LeetCode 2181.合并零之间的节点
  • 千益畅行,共享旅游卡,引领旅游新潮流