随笔分类 - 【专业课】数据结构与算法
摘要:当一个数上方箭头所指的一侧, 相邻的数比这个数小的时候, 称这个数处于活动状态 6、3、5处于活动状态,显然1永远不是活动的 n除了以下两种情形外,它都处于活动状态: (1) n是第一个数,且其方向指向左侧; (2) n是最后一个数,且其方向指向右侧。 Johnson-Trotter 算法: (1)
阅读全文
摘要:矩阵连乘问题是一个经典的优化问题,可以通过动态规划方法有效解决。其目标是确定矩阵连乘的最佳顺序,以最小化计算所需的标量乘法次数。 问题描述 给定一系列矩阵 $ A_1, A_2, \ldots, A_n $,每个矩阵 $ A_i $ 的维度为 $ p_{i-1} \times p_i $。我们希望找
阅读全文
摘要:目录问题描述动态规划解法1. 定义状态2. 状态转移方程3. 初始化4. 实现细节Python 示例代码复杂度分析结论贪心法求解贪心法的想法示例贪心选择过程结论回溯法求解回溯算法的思路Python 实现代码说明复杂度分析总结分支限界法求解问题描述分支限界法的思路Python 实现代码说明复杂度分析总
阅读全文
摘要:目录Dijkstra 算法step0. 初始状态step1. 第一轮step2. 第二轮step3. 第三轮step4. 第四轮 Dijkstra 算法 以下面有向图为例: graph LR V0((V0)) -- 10 --> V1((V1)) V0((V0)) -- 5 --> V4((V4))
阅读全文
摘要:9. 全排列问题(不考虑重复数字) 【描述】什么是全排列?例如,给定一串数字 1,2,3,那么它们的全排列就是: 1,2,3 1,3,2 2,1,3 2,3,1 3,1,2 3,2,1 注意,该问题不考虑有重复数字的情况。 【算法分析】运用回溯的思想。 假设有三个元素,初始情况为: i=0 | i=
阅读全文
摘要:6. 四皇后问题 【描述】在一个 4x4 棋盘例摆放 4 个皇后,要求任意两个皇后不能在同一行、同一列和同一斜线(平行于对角线上),请输出所有的摆法。 【限制条件实现】摆放皇后的位置(i,j)需要满足: 第 i 行没有其他位置被占用; 第 j 列没有其他位置被占用; 两个斜对角线上没有其他位置被占用
阅读全文
摘要:0. 回溯模板 搜索算法中的回溯策略,也是深度优先搜索的一种策略,比较接近早期的人工智能。毕竟,搜索是人工智能技术中进行问题求解的基本技术,很多问题都可以归结到某种搜索。 下面给出回溯算法的模板,很多题目其实可以套用该模板快速解决。但是请注意,深度优先搜索一般不能应用于求解最优解的问题上。 // n
阅读全文
摘要:1. 阶乘 输入一个整数 n,输出 n 的阶乘。 传统的递归写法: #include <cstdio> using namespace std; long long func (int n){ if (n == 0 || n == 1) return 1; else return n * func(
阅读全文
摘要:1. 素数判定 判定从 2 到sqrt(n)依次能否把 n 整除,若存在可以整除的数则说明 n 不是素数,若都不可以整除则说明 n 是素数。 注意:2 是特殊的素数。 为什么到sqrt(n)就可以了呢?请观察下面两个合数的例子: 30 分解为两个因数相乘: 2 x 15 3 x 10 5 x 6 6
阅读全文
摘要:1. 十进制转二进制 #include <stdio.h> #include <vector> using namespace std; int main(){ unsigned int n; while (scanf("%d", &n) != EOF){ vector<int> binary; /
阅读全文
摘要:1. 打印极值点下标 【描述】在一个整数数组上,对于下标为i的整数,如果它大于所有它相邻的整数, 或者小于所有它相邻的整数,则称该整数为一个极值点,极值点的下标就是i。 【输入描述】每个案例第一行为此数组元素个数k(4<k<80),第二行是k个整数,每两个整数之间用空格分隔 【输出描述】每个案例输出
阅读全文
摘要:1. 几月几号是一年中的第几天? 输入: 年 月 日 输出: 该天是在该年中的第几天 输入和输出样例: 2000 1 31 31 2000 6 28 180 1990 5 20 140 代码: #include <stdio.h> int monthDay[2][13] = { {0, 31, 28
阅读全文
摘要:1. 快速幂 算法原理: 计算$3^{11}$: $3^{11} = (3^5)^2 \times 3$ $3^5 = (3^2)^2 \times 3$ $3^2 = 3 \times 3$ 仅需计算 3 次,而非 11 次 计算 $3^{10}$: $3^{10} = (3^5)^2$ $3^5
阅读全文
摘要:参考此文章:《非递归算法——快速排序、归并排序》 算法原理图: 算法代码: #include <stdio.h> #include <stack> using namespace std; // 记录区间左右两端索引值 typedef struct{ int low; int high; } ind
阅读全文
摘要:[toc] - 对任意 n 个关键字排序的比较次数至少为log~2~(n!)(向上取整) ## 0 利用 C++ 标准库实现排序 ```cpp #include #include using namespace std; #define NUM 50 int A[NUM] = {0}; // 返回t
阅读全文
摘要:卡特兰数公式 f(n) = C(2n,n) / (n+1) 计算用途:二叉树形态数,出栈序列数 出栈序列数 【例 1】3 个不同元素依次进栈,能得到多少种不同的出栈序列? 【解】f(3) = C(6,3) / (3+1) = 20 / 4 = 5 【例 2】5 个不同元素依次进栈,能得到多少种不同的
阅读全文
摘要:【注】不是重点考点,所以内容比较少,自用。 归并排序 将若干个子文件读入内存缓冲区,并利用内部排序的办法对它们进行排序,并将排好序的有序子文件写回外存。此时这些有序子文件称为归并段。 对这些归并段进行逐趟归并,使归并段逐渐由小到大,直至得到整个有序文件为止。 多路平衡归并 增加归并路数 k,能减少归
阅读全文
摘要:1 计算二叉树中双分支结点的个数 假设二叉树采用二叉链表存储,试设计一个算法,计算一棵给定二叉树的所有双分支结点个数。 int count = 0; void Degree2 (BiTree T){ if (T != NULL){ Degree2(T->lchild); Degree2(T->rch
阅读全文
摘要:1 线性探测法 1.1 查找成功时的 ASL 查找元素 47(散列函数:3)次数:1 查找元素 7(散列函数:11)次数:1 查找元素 29(散列函数:7)次数:2 查找元素 11(散列函数:0)次数:1 查找元素 9(散列函数:9)次数:1 查找元素 84(散列函数:7)次数:4 查找元素 54(
阅读全文
摘要:1 哈夫曼树的构造 将 n 个结点作为 n 棵仅含一个节点的二叉树,构成森林 F 在 F 中选取两棵权值最小的二叉树,作为新结点的左右子树,并将新结点的权值置为左、右子树的根结点的权值之和 将新结点的二叉树加入 F 中,同时删去原来两棵选取出来的二叉树 重复以上步骤,直到 F 中只剩一棵二叉树 【哈
阅读全文

浙公网安备 33010602011771号