算法设计与分析(1)——基础知识

article/2025/10/28 17:46:26

写完 Java 的我又开始对 算法设计与分析 下手了(✿◡‿◡)

内容主要是以 北京大学 屈婉玲老师的 MOOC 视频来写的,视频共是十周的内容,我决定用 篇博客完成。

温馨提示:这个课程不仅适用于 算法设计与分析 的学习,也非常适用于 数学建模 的学习,如果是学习 数学建模的基础部分,前两周的内容是非常适合的,如果要进一步学习 建模思想,建议把这十周视频好好看一遍。( •̀ ω •́ )y

我们还是先来看一下这十周视频的思维导图:

在这里插入图片描述
在这篇博客中写的是前两周的内容:基础知识。

第一周

排序问题的计算复杂度

如下表:

NP-hard 问题(NP难问题):

货郎问题、0-1背包问题、双机调度问题等。

至今没有找到有效算法(我们指的有效算法就是运行时间是 n 的多项式,比如 n 的平方, n 的立方等等),现有的算法的运行时间是输入规模的指数或更高阶函数。

那以后能不能找到多项式时间的算法呢?至今没有人能够证明对于这类问题不存在多项式时间的算法。

算法的两种时间复杂度

最坏情况下的时间复杂度 W(n):
算法求解输入规模为 n 的实例所需要的最长时间。

平均情况下的时间复杂度 A(n):
在给定同样规模为 n 的输入实例的概率分布下,算法求解这些实例所需要的平均时间。

算法的伪码描述

五种表示函数的阶的符号

具体的定义就不说了,我想你们会有更详细的资料,我们直接来看怎么把这五种表示函数的阶的符号记得更牢,并且不会记错。

大 O 符号:f(n) = O( g(n) )
称 f(n) 的渐近的上界是 g(n),f(n) 的阶不高于 g(n) 的阶。(类似于小于等于符号)

大 Ω 符号:f(n) = Ω( g(n) )
称 f(n) 的渐近的下界是 g(n),f(n) 的阶不低于 g(n) 的阶。(类似于大于等于符号)

小 o 符号:f(n) = o( g(n) ),f(n) 的阶低于 g(n) 的阶。(类似于小于符号)
小 w 符号:f(n) = w( g(n) ),f(n) 的阶高于 g(n) 的阶。(类似于大于符号)

θ 符号
若 f(n) = O( g(n) ) 且 f(n) = Ω( g(n) ) ,则记作 f(n) = θ( g(n) ) (类似于等于符号)

有关函数渐近的界的定理

定理1:函数的阶与极限的关系

定理2:函数的阶之间的关系具有传递性

定理3:有限个函数和的阶与原函数的阶的关系

定理的证明过程用到阶的符号的定义,我在这里就省略了。
我们来说一下常用的一些重要结果:
(1):多项式函数的阶低于指数函数的阶
(2):对数函数的阶低于幂函数的阶(幂函数也就是多项式函数)

由定理1 和定理2 我们可得到估计函数的阶的两个方法:计算极限、阶具有传递性。

算法的时间复杂度是各步操作时间之和,在常数步的情况下取最高阶的函数即可。

基本函数类

对数函数

说明:
(1)logn 没有写底时代表的是 log 以2为底的对数
(2) 对于对数函数,它们的底并不重要,因为我们常常关注的是函数的阶,所以对于以任何常数为底的对数函数它们都是同阶的。
(3)a 的 log 以b为底的n 等于 n 的 log 以b为底的a。(两者相等的证明:等号两边同时取对数即可)如果看等号前面哪个表达式,n在指数位置的地方,看起来很像一个指数函数。其实并不是,因为前一个表达式等于后一个表达式,而后一个表达式是多项式函数,所以 a 的 log 以b为底的n 是一个多项式函数。一般,我们遇到左边的这种表达式,都是写为右边的表达式,

斯特林公式

斯特林公式的应用:估计搜索空间的大小

取整函数

第一周小结:五种符号+六个公式

1.五种表示函数的阶的符号 是重点,每一个符号代表的意义一点要记住的。
2.在对数函数和斯特林公式中,里面由一些重要的函数,包括:

第二周

序列求和基本公式

估计序列和

(1)放大法求上界:

(2)用积分做和式的渐近的界

递推方程

说明:
(1)实际上递推方程,表达的是这个序列的项和它前边的项的依赖关系。
(2)递推方程的求解:给定关于序列的递推方程和初值,求出第 n 个项的通项公式的过程。

迭代法求解递推方程

直接迭代,代入初值,然后求和:

例子:

换元迭代:对递推方程和初值进行换元,然后求和,求和后进行相反换元,得到原始递推方程的解。

例子:

验证方法——数学归纳法。

差消法化简高阶递推方程

对于递推方程的求解基本方法是迭代,如果这个依赖关系比较复杂的时候,直接迭代就会非常困难。这个时候,我们就要尽量化简,把高阶递推方程先用差消法化简为一阶方程。然后继续迭代。

例子:




递归树

递归树是迭代的图形表示。
(1)递归树的概念:

(2)迭代在递归树中的表示:

说明:
递归树和迭代有着紧密的联系,是迭代的模型。
假定上面的是递归方程,左边是规模为 m 的工作量 W(m) 。右边出现它的一些子问题(带W()的项,我们称为函数项),划分规划需要的工作量(称为非函数项)。

把函数项作为儿子,非函数项作为根,就形成上面的一层迭代。

(3)递归树的生成规则:

(4)如何利用递归树求解递推方程:
由上面的迭代在递归树中的表示,可以看出对递归树上所有的项进行求和就是迭代后方程的解。

主定理及其证明

主定理是求解递推方程的另外一种方法。

主定理的应用背景:

主定理的内容:

说明:
看到递推公式,
第一步:看是否满足主定理应用的条件,也就是看递推公式是否是主定理递推公式的形式;
第二步:拿 f(n) 分别与三种情况进行比较,看符合那一种,就可以估计出递推方程的解。

注意:主定理的第 3 种情况的条件,比前两种情况多一个。

证明过程在此省略,我们需要记住的是主定理的内容,还有可以应用主定理的条件。

第二周小结:序列求和方法+递推方程求解

序列求和的方法:
(1)用基本公式求解;
(2)放大法就上界;
(3)用积分做和式渐近的界。

递推方程的求解:
(1)迭代法(包括 直接迭代和换元迭代);
(2)差消法化简高阶递推方程;
(3)用递归树求解递推方程;
(4)用主定理求解递推方程。

例子总结:


http://chatgpt.dhexx.cn/article/ITGbyS5C.shtml

相关文章

算法设计与分析——算法基础初步了解

算法的概念 算法:一个有计算步骤构成的序列,可以将一组输入值转换成相应的输出值。或可以用例解决一个明确的问题。 问题:输入及相应输出的描述: 算法的特点:确定性、可行性、输入和输出及有穷性。 正确的算法;停机并…

算法设计与分析基础知识

一、算法设计基础 算法是(algorithm)是对特定问题求解步骤的一种描述,是指令的有限序列。 算法的五个特性: 输入:一个算法可以有零个或多个输入。 输出:一个算法有一个输出或多个输出。 有穷性(…

为你的股票绘制趋势图

手里有一点点公司的股票, 拿不准在什么时机抛售, 程序员也没时间天天盯着看,不如动手写个小程序, 把股票趋势每天早上发到邮箱里,用 python 的 pandas, matplotlib 写起来很容易, 几十行代码搞定。 准备环…

用PYTHON画图 看股票/数字货币的趋势分析 带你直观理解指标 K线图

用PYTHON画图 看股票/数字货币的趋势分析 带你直观理解指标 本文章将用PYTHON 画图 以比特币(BTC)为例 进行画图分析 (小白向) Pycharm平台编写 所用到的python库 import requests from lxml import etree import math import …

Plotly中绘制三种经典的股票交易图表(含视频讲解)

作者:Lemon 来源:Python数据之道 Plotly中绘制三种经典的 股票交易图表(含视频讲解) 大家好,我是 Lemon 。 背景 前一段时间, Lemon 发了一期视频,分享了 Plotly 和 Dash 在投资领域的应用案例。…

如何在股票软件画波浪?波浪原理?初级应用画线

如何在股票软件画波浪?波浪原理?初级应用画线 听语音 浏览:1|更新:2018-03-13 10:07|标签:股票 1 2 3 4 5 6 7 分步阅读 波浪理论最主要特征就是它的通用性,在股市中是一个十分重要的技术研究方向,一旦成…

使用Python生成股票K线图

可视化股票数据,这里只做简单的处理,只显示k线图。选取的是海通证券(600837)2020年1月1日之后150个交易日的数据。这里代码不多,没有封装成方法,代码如下。数据是提前获取的,获取方法见&#xf…

Python获取股票数据并绘制相应K线图,看这个就够了!

Python对股票的K线可视化 前言说明注意 数据获取Tushare获取股票数据获取医疗器械板块数据(代码部分)获取股票数据(代码部分) 数据预处理变量中文化(代码部分) K线绘制代码部分结果展示 写在最后 前言 说明…

使用mpl_finance画股票K线图

使用mpl_finance画股票K线图 前言正文 前言 今天给大家介绍一下如何利用 python 中的 mpl_finance 模块画股票K线图。 该模块在 matplotlib 2.0之前是叫做 matplotlib.finance 但此之后是叫做 mpl_finance。 详细介绍请看https://matplotlib.org/api/finance_api.html 。具体用…

Python画图实战之画K线图【附带自动下载股票数据】

关于Python画图的基本知识可以先查看下面这篇文章Python画图(直方图、多张子图、二维图形、三维图形以及图中图)https://blog.csdn.net/weixin_41896770/article/details/119798960 对于股民来说,K线图是最常见的一种参考,使用Pyt…

一步一步教你写股票走势图——K线图二(图表联动)

目录 一步一步教你写股票走势图——分时图一(概述) 一步一步教你写股票走势图——分时图二(自定义xy轴) 一步一步教你写股票走势图——分时图三(对齐图表、自定义柱状图高亮) 一步一步教你写股票走势图…

如何对走势图进行画线分析

现货黄金投资入门与技巧,如何都绕不开这个问题,那就是画线分析。画线分析是技术分析一个重要的流派,也是我们分析市场必不可少的手段,掌握画线的方法,对我们掌握现货黄金投资入门与技巧有很大的帮助。 一、支撑线和压力…

使用Python绘制精美绝伦的股票行情K线图

PythonPyQt2.74 本文简单介绍了如何从Tushare获取某支股票的价格数据,并根据价格数据画出相应的日K线图。 # -*- coding: utf-8 -*-import sys import talib import numpy as np import pandas as pd import tushare as ts import datetime as dt import pyqtgraph …

缠论 公式 自动画线 画笔 中枢 买卖点 源代码

显示效果 跨级别区间套演示 板块演示 个股演示 期货演示 源码如下&#xff1a; {三角形中枢}时间:4;A:HHHV(H,时间*5) AND HHV(H,时间*5)>REF(HHV(H,时间*5),1);B:LLLV(L,时间*5) AND LLV(L,时间*5)<REF(LLV(L,时间*5),1);CC1:DRAWLINE(A,H,B,L,0);CC2:DRAWLINE(B,L,A,H…

利用 python numpy +matplotlib 绘制股票k线图

一、python numpy matplotlib 画股票k线图 # -- coding: utf-8 -- import requests import numpy as np from matplotlib import pyplot as plt from matplotlib import animationfig plt.figure(figsize(8,6), dpi72,facecolor"white") axes plt.subplot(1…

一步一步教你写股票走势图——K线图三(添加均线)

目录 一步一步教你写股票走势图——分时图一&#xff08;概述&#xff09; 一步一步教你写股票走势图——分时图二&#xff08;自定义xy轴&#xff09; 一步一步教你写股票走势图——分时图三&#xff08;对齐图表、自定义柱状图高亮&#xff09; 一步一步教你写股票走势图…

[逐笔数据分析工具分享]如何分析股票逐笔数据

工具分享链接&#xff1a;https://pan.baidu.com/s/1fbDoPM2NzSBEn31gDBZnpQ 提取码&#xff1a;v0sm ​1. 配置stocklist.txt和datelist.txt stocklist为要分析的股票号码&#xff0c;可为任意个 datelist为要分析的日期&#xff0c;可为任意个 以上都为空时&#xff0c;则…

【K线绘图】教你用python绘制带有买卖点的股票K线图(附送鳄鱼指标、顾比均线指标、dataframe格式化输出)

提示&#xff1a;文章内买卖点不构成交易依据&#xff0c;请根据情况自行决策。 教你用python绘制带有买卖点的股票K线图&#xff08;附带鳄鱼指标、顾比均线指标、dataframe格式化输出&#xff09; 前言一、自己绘图&#xff0c;是不是疯了&#xff1f;二、分步说明1. 准备工作…

股票K线图绘制

股票K线图绘制 文章目录 股票K线图绘制前言一、股票K线图基础知识二、用Python绘制股票K线图总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能的不断发展&#xff0c;机器学习这门技术也越来越重要&#xff0c;很多人都…

屏幕画笔工具Pointofix,期货/股票复盘分析画线好工具

工具介绍&#xff1a; Pointofix可以将K线图表定格在屏幕某一个画面上&#xff0c;然后可以使用工具趋势线、图形&#xff0c;放大某个细节等&#xff0c;是一款很好的复盘分析画线工具。 Pointofix使用功能&#xff1a; 1.高亮屏幕&#xff1a;手绘笔&#xff1b; 2.直线&…