随笔分类 - 算法
摘要:快速幂就是快速求解一个整数a的n次幂的算法,传统的求解思路是按照线性的求解顺序:,这样做的算法时间复杂度是,而快速幂借助二进制的思想,可以将时间复杂度降低到 int quick_pow(int a, int n) { int a
阅读全文
摘要:转载于:https://www.jianshu.com/p/452c1a5acd31 对于整数的取模运算,想必大家已经比较熟悉了,譬如说 7 对 3 取模,结果是多少,我们可以按照小学的公式:被除数÷除数=商……余数 来推算: 7 ÷ 3 = 2 ...... 1 那么结果是 1。 对于正整数来说,
阅读全文
摘要:一、自定义比较函数 #include <iostream> #include <algorithm> using namespace std; struct Node{ string name; int age; }; bool cmp(const Node a, const Node b) { r
阅读全文
摘要:一、Description 原题链接 和poj1088同样的题目 【题目描述】 benben喜欢滑雪。(以下简叙)在一个的整数矩阵上找一条高度严格递减的最长路。起点任意,但每次只能沿着上下左右4个方向之一走一格,并且不能走出矩阵外。如图所示,最长路是按照高度25,2
阅读全文
摘要:力扣115:不同的子序列 https://leetcode-cn.com/problems/distinct-subsequences/ 题解: AC代码 class Solution { public: int numDistinct(string s, string t) { int sl =
阅读全文
摘要:部分背包问题、Huffman编码、活动选择 提出贪心策略:观察问题特征,构造贪心选择 证明策略正确:假设最优方案,通过替换证明 1 部分背包 按性价比大小从小到大排序,先选择性价比高的物品; def F_Knapsack(n,p,v,C) { 把所有物品按照价值/体积的比升序; //排序时间复杂度n
阅读全文
摘要:图算法 1 BFS def BFS(G<V,E>, s) { 新建:队列Q 前驱数组 pred[] 距离数组 dist[] 颜色数组 celor[] // 初始化 for(u in V) { color[u] = white; pred[u] = NULL; dist[u] = INF; } col
阅读全文
摘要:0-1背包问题、最大连续子数组问题、最长公共子序列、最长公共子串、最小编辑距离、钢条切割、矩阵链乘 0-1背包问题、最大连续子数组问题、最长公共子序列、最长公共子串、最小编辑距离、钢条切割、矩阵链乘 动态规划问题的一般步骤: 给出问题的表示,明确子问题 分析最优结构,构造递推公式 确定计算顺序,依次
阅读全文
摘要:侧重于分解:快速排序、次序选择 侧重于合并:归并排序、逆序计数、最大子数组 最大子数组问题 GetAcross(A, left, mid, right) { // mid左边 s_left = -INF, sum = 0; for(i=mid to left) { sum += A[i]; if (
阅读全文
摘要: 本题的一个重要转化是:将每小岛的位置转换成一个线段,然后求能够使得每个线段上都有一个点的情况下,需要的点的最小个数。因为有重叠部分的线段只需要一个点就可以,所以重点在于求线段的交集。 对于一组线段组成的集合,当且仅当 这个集合中最大的左端点小于最小的右端点的时候,这一组线段集合才会都重叠。
阅读全文
摘要:贪心策略: 情况一: 如果最大的电池寿命大于其他所有的电池寿命之和,ans为其他所有的之和 情况二: 如果最大的电池寿命小于其他所有电池寿命之和 ,ans为所有电池寿命的一半 情况一很容易证明,比如电池寿命分别为:, 如果$a_n >
阅读全文
摘要:贪心算法——部分背包问题 贪心策略的一般步骤: 提出贪心策略:观察问题特征,构造贪心选择 证明策略正确:假设最优方案,通过替换证明(交换论证法或者数学归纳法) 一、部分背包的形式化定义 贪心策略:最高性价比优先。 先按单位质量的价值从大到小排序,然后尽可能装入单位价值大的物品。 贪心策略正确性证明:
阅读全文