算法
文章平均质量分 89
算法
小嗷犬
CSDN人工智能领域优质创作者,阿里云专家博主。
展开
-
程序设计 堆
堆是一棵树,其每个节点都有一个键值,且每个节点的键值都大于等于/小于等于其父亲的键值。每个节点的键值都大于等于其父亲键值的堆叫做小根堆,否则叫做大根堆。STL 中的其实就是一个大根堆。(小根)堆主要支持的操作有:插入一个数、查询最小值、删除最小值、合并两个堆、减小一个元素的值。一些功能强大的堆(可并堆)还能(高效地)支持 merge 等操作。一些功能更强大的堆还支持可持久化,也就是对任意历史版本进行查询或者操作,产生新的版本。原创 2023-08-14 16:43:09 · 246 阅读 · 1 评论 -
程序设计 树基础
一个没有固定根结点的树称为无根树有n个结点,n−1条边的连通无向图无向无环的连通图任意两个结点之间有且仅有一条简单路径的无向图任何边均为桥的连通图没有圈,且在任意不同两点间添加一条边之后所得图含唯一的一个圈的图在无根树的基础上,指定一个结点称为根,则形成一棵有根树有根树在很多时候仍以无向图表示,只是规定了结点之间的上下级关系,详见下文。森林(forest):每个连通分量(连通块)都是树的图。按照定义,一棵树也是森林。生成树(spanning tree)原创 2023-08-14 01:16:24 · 282 阅读 · 0 评论 -
程序设计 算法基础
时间复杂度和空间复杂度是衡量一个算法效率的重要标准。同一个算法在不同的计算机上运行的速度会有一定的差别,并且实际运行速度难以在理论上进行计算,实际去测量又比较麻烦,所以我们通常考虑的不是算法运行的实际用时,而是算法运行所需要进行的基本操作的数量。在普通的计算机上,加减乘除、访问变量(基本数据类型的变量,下同)、给变量赋值等都可以看作基本操作。对基本操作的计数或是估测可以作为评判算法用时的指标。衡量一个算法的快慢,一定要考虑数据规模的大小。所谓数据规模,一般指输入的数字个数、输入中给出的图的点数与边数等等。一原创 2023-07-30 22:33:14 · 934 阅读 · 0 评论 -
Python 背包问题
背包问题(Knapsack Problem)是一类常见的组合优化问题。其问题描述为:给定一个固定大小、能够携重 WW 的背包,以及一组有价值和重量的物品,找出一个最佳解决方案,使得装入背包的物品总重量不超过 WW,且总价值最大。原创 2023-07-07 21:48:34 · 2667 阅读 · 0 评论 -
打家劫舍问题 Python题解
本文将为大家讲解动态规划经典问题——打家劫舍问题,并附有Python题解。原创 2023-05-25 00:59:09 · 797 阅读 · 1 评论 -
C++ 标准模板库(Standard Template Library,STL)
C++ 标准模板库StandardTemplateLibrary)是 C++ 标准库的一部分,不需要另外安装,直接导入即可使用。STL 为程序员提供了通用的模板类,这些模板类可以用来实现各种数据结构和算法,从而使程序员不必从头开始编写这些代码。STL 很好地实现了数据结构和算法的分离,大大降低了模块之间的耦合度,程序员可以自由组合 STL 提供的数据结构和算法。容器(Containers):各种数据结构,如vectordequemapset等。算法(Algorithms)原创 2023-04-21 18:21:11 · 1749 阅读 · 4 评论 -
Python 运行加速小技巧
本文介绍了一些 Python 加速的小技巧,可以用在日常算法练习和算法竞赛中。原创 2023-03-27 23:22:28 · 465 阅读 · 0 评论 -
Python 容器的时间复杂度
在实际应用中,我们应该根据具体的场景来进行选择,而不是盲目地使用单一容器。在需要高速度的情况下,我们可以选择常用操作时间复杂度低的容器,但是需要注意的是,效率优化后的容器可能会占用更多的内存,所以也并不是无脑使用效率更高的容器就行了,必须结合场景进行考量,选择最合适的容器。原创 2023-03-24 20:46:57 · 544 阅读 · 0 评论 -
Python 优先队列:heapq库的使用
heapq库是 Python 标准库中的一部分,它提供了一些堆操作的函数,可以用来实现优先队列。优先队列是一种特殊的队列,它的每个元素都有一个优先级,元素的出队顺序是按照优先级从高到低的顺序进行的。优先队列的实现有多种方式,其中最常用的是堆。堆是一种特殊的树,有两种类型,分别是最大堆和最小堆。最大堆的每个节点的值都大于或等于其子节点的值,最小堆的每个节点的值都小于或等于其子节点的值。堆的根节点是堆中的最大值(最小堆的根节点是最小值)。heapq。原创 2023-03-15 17:33:50 · 584 阅读 · 0 评论 -
[Python题解] CodeForces 1804 D. Accommodation
Annie is an amateur photographer. She likes to take pictures of giant residential buildings at night. She just took a picture of a huge rectangular building that can be seen as a table of n * m windows. That means that the building has n floors an原创 2023-03-13 13:56:46 · 594 阅读 · 1 评论 -
[蓝桥杯 2016 省 B] 交换瓶子 Python 题解
[蓝桥杯 2016 省 B] 交换瓶子 Python 题解原创 2023-03-11 23:13:26 · 430 阅读 · 2 评论 -
Python 二分查找:bisect库的使用
bisect库是 Python 标准库中的一部分,它提供了二分查找的功能。二分查找是一种在有序列表中查找某一特定元素的搜索算法。它的时间复杂度为OlognO(\log n)Ologn,比顺序查找的时间复杂度OnO(n)On要有效率。原创 2023-03-10 17:40:39 · 1793 阅读 · 0 评论 -
MATLAB 马尔可夫链
本文介绍了马尔可夫链的基本概念,以及如何使用 MATLAB 来构建马尔可夫链预测模型。马尔可夫链是一种随机过程,它的状态转移是由当前状态决定的,与过去的状态无关。马尔可夫链的状态转移矩阵是一个方阵,它的每一行元素之和为1,这样的矩阵称为概率转移矩阵。马尔可夫链的状态转移矩阵可以用来表示状态转移的概率。原创 2023-02-08 17:47:53 · 5932 阅读 · 0 评论 -
MATLAB 回归分析
本文介绍了 MATLAB 中的回归分析,包括一元线性回归、多项式回归、多元线性回归、非线性回归等。原创 2023-02-07 22:27:19 · 5884 阅读 · 1 评论 -
MATLAB 阻滞增长模型
MATLAB阻滞增长模型。最早的人口增长模型是 Malthus 于 1798 年提出的指数模型,基本假设是人口增长率 r 是常数。这个模型的问题在于,它没有考虑到人口增长的阻滞因素,即人口增长的上限。因此,当预测时间 t 较短时,模型的预测结果是合理的,但是当预测时间 t 较长时,模型的预测结果就会出现较大的误差。由于人口不可能无限制的增长,当人口达到一定数量后,那么增长率就会下降。因此, Verhulst 于 1838 年提出了阻滞增长模型,基本假设是人口增长率 r 随着人口数量 N 的增加而减小。原创 2023-02-07 16:46:16 · 8072 阅读 · 22 评论 -
MATLAB 种群竞争模型
本文介绍了 MATLAB 中的种群竞争模型。当两个种群为争夺同一食物来源和生活空间相互竞争时,常见的结局是一方被淘汰,另一方获得优势。这种现象在生物学中被称为“竞争”。在数学建模中,我们可以通过种群竞争模型来模拟这种现象。原创 2023-02-07 15:10:01 · 5295 阅读 · 0 评论 -
MATLAB 背包问题
本文介绍了 MATLAB 中的背包问题,包括 0-1 背包问题、完全背包问题、多重背包问题等。原创 2023-02-07 00:09:05 · 3553 阅读 · 12 评论 -
MATLAB 最小生成树
本文介绍了 MATLAB 中如何求解最小生成树。原创 2023-02-06 21:39:32 · 3566 阅读 · 0 评论 -
MATLAB 最短路
本文介绍了 MATLAB 中的最短路问题,以及如何使用 MATLAB 解决最短路问题。原创 2023-02-06 21:10:40 · 4485 阅读 · 4 评论 -
MATLAB 网络流
本文介绍了如何使用 MATLAB 解决最大流问题。原创 2023-02-06 20:18:15 · 2385 阅读 · 6 评论 -
MATLAB 动态规划
动态规划是一种数学优化方法,它是一种在给定约束条件下,求解最优化问题的方法。动态规划的基本思想是将原问题分解为若干个子问题,先求解子问题的最优解,然后根据子问题的最优解,求解原问题的最优解。将原问题分解为子问题确定状态确定一些初始状态(边界状态)的值确定状态转移方程思想上类似于递归,但动态规划采用记录子问题的最优解的方法,避免了重复计算子问题的最优解,从而提高了计算效率;除此之外,动态规划通常采用自底向上的方法,而递归通常采用自顶向下的方法。原创 2023-02-05 23:48:07 · 3855 阅读 · 0 评论 -
[做初中数学题做到打起来了]跟同事为了他小孩的数学题杠上了
4只小鸭子在一个大的圆形水池中,分别随机的出现在圆圈中的任意一点。4只鸭子出现在同一个半圆内的概率是多少?本文将带领大家使用蒙特卡洛方法求解此题。原创 2022-10-22 10:14:24 · 1367 阅读 · 4 评论 -
Python 递归函数
它能够把一个大型复杂的问题转化为一个与原问题相似的较小规模的问题来求解,用非常简洁的方法来解决重要问题。就像一个人站在装满镜子的房间中,看到的影像就是递归的结果。以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……程序设计可以让你的工作由几天节约至几个小时,好的算法可能可以让你的程序运行时间从几个小时节约至几秒钟。被计算了无数次,如果我们能在第一次计算出来后就存储下来,以供后面使用,会不会快些?,基例不需要再次递归,它是确定的表达式;原创 2022-10-06 23:41:19 · 1168 阅读 · 2 评论 -
C/C++ 计数排序
计数排序是一种非基于比较的排序算法,该算法于1954年由提出。找出待排序的数组中最大和最小的元素统计数组中每个值为i的元素出现的次数,存入数组C的第i项对所有的计数累加(从C中的第一个元素开始,每一项和前一项相加)反向填充目标数组:将每个元素i放在新数组的第C[i]项,每放一个元素就将C[i]减去1它的优势在于在对一定范围内的整数排序时,它的复杂度为Ο(n + k)(其中k是整数的范围),快于任何比较排序算法。当然这是一种牺牲空间换取时间的做法,而且当O(k)>......原创 2022-08-31 23:26:27 · 1349 阅读 · 1 评论 -
C/C++中的素数判定
素数又称质数。如何有效判断素数?暴力试除、筛法。埃氏筛、欧拉筛,动图演示、代码实例。原创 2022-08-04 16:43:52 · 7487 阅读 · 2 评论 -
C/C++的三种入门排序方法
C/C++的三种入门排序方法:冒泡排序、插入排序、选择排序。什么是冒泡排序?什么是插入排序?什么是选择排序?它们的定义、设计思路、动图演示与代码实现原创 2022-08-01 16:02:09 · 480 阅读 · 3 评论