【常见算法笔记】教程文章相关的互联网学习教程文章

【算法笔记】用指针实现小顶堆【代码】

本文将讨论指针堆与数组堆的区别,和指针堆的具体实现方式。题目:洛谷P3378啊对了,下文不会解释指针是什么、指针的用法、为什么加“&”等基础问题,需要的建议去看《算法竞赛入门经典训练指南》中指针版名次数(treap)的实现,或是向懂的小伙伴提问。一 指针与数组的比较数组版中,由于下标的特殊性质,我们可以快速找到某个节点的父亲节点。所以在数组版中,大多使用的是从叶子往根节点更新的插入/删除方式。同时,数组版的原理是...

算法笔记之归并排序

4、归并排序4.1算法思想——将数组分为两半,对每部分递归地应用归并排序,直到最后的子数组只包含一个元素。在每部分都排好序后,对它们进行合并。4.2 时间复杂度——假如用T(n)表示使用归并排序对n个元素构成的数组进行排序而使用的时间,用mergeTime来表示将两个子分组合并起来而花费的时间。那么T(n)= T(n/2)+T(n/2) + mergetime而megeTime就是归并两个子数组所耗费的时间,以最大时间来算,最多需要n-1次来比较两个子数组...

算法笔记_093:蓝桥杯练习 Problem S4: Interesting Numbers 加强版(Java)【代码】【图】

目录1 问题描述2 解决方案 1 问题描述Problem Description  We call a number interesting, if and only if:  1. Its digits consists of only 0, 1, 2 and 3, and all these digits occurred at least once.  2. Inside this number, all 0s occur before any 1s, and all 2s occur before any 3s.  Therefore, the smallest interesting number according to our definition is 2013. There are two more interseting nu...

算法笔记_160:算法提高 约数个数(Java)【代码】【图】

目录1 问题描述2 解决方案 1 问题描述 输入一个正整数N (1样例输入12样例输出6样例说明  12的约数包括:1,2,3,4,6,12。共6个 2 解决方案 具体代码如下:import java.util.Scanner;publicclass Main {publicstaticvoid main(String[] args) {int count = 0;Scanner in = new Scanner(System.in);int n = in.nextInt();for(int i = 1;i <= n;i++) {if(n % i == 0)count++;}System.out.println(count);} } 原文:http://www.cnblo...

算法笔记--三分查找【代码】

好菜啊,现在才学三分。三分:查找凸形(凹形)函数的极大值(极小值)。模板1:double three_divide() {double l=0,r=1000;double mid=(l+r)/2;double mm=(l+mid)/2; while(r-l>=eps){if(F(mid)>F(mm))r=mid;else l=mm;mid=(l+r)/2;mm=(l+mid)/2;}return F(mid); } 模板2: double three_divide() {double l=0,r=1000;double m1=(l+l+r)/3;double m2=(l+r+r)/3; while(r-l>=eps){if(F(m2)>F(m1))r=m2;else l=m1;m1=(l+l+r)/3;m2=(...

算法笔记_164:算法提高 最小方差生成树(Java)【代码】【图】

目录1 问题描述2 解决方案 1 问题描述问题描述给定带权无向图,求出一颗方差最小的生成树。输入格式输入多组测试数据。第一行为N,M,依次是点数和边数。接下来M行,每行三个整数U,V,W,代表连接U,V的边,和权值W。保证图连通。n=m=0标志着测试文件的结束。输出格式对于每组数据,输出最小方差,四舍五入到0.01。输出格式按照样例。样例输入4 51 2 12 3 23 4 24 1 12 4 34 61 2 12 3 23 4 34 1 12 4 31 3 30 0样例输出Case 1: 0.22C...

【算法笔记】B1029 旧键盘【代码】

1029 旧键盘 (20 分)旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现。现在给出应该输入的一段文字、以及实际被输入的文字,请你列出肯定坏掉的那些键。输入格式:输入在 2 行中分别给出应该输入的文字、以及实际被输入的文字。每段文字是不超过 80 个字符的串,由字母 A-Z(包括大、小写)、数字 0-9、以及下划线 _(代表空格)组成。题目保证 2 个字符串均非空。输出格式:按照发现顺序,在一行中输出坏掉的...

【算法笔记】基本算法分类

一、穷举法  思想:在没有很好的算法进行运算的情况下,可以尝试穷举所有情况。  EX:顺序找K值二、回溯、搜索  回溯的思想:能进则进,不能进则换,不能再后退的过程。  EX:八皇后、树和图遍历三、递归分治  思想:通过统一的方法,对整体中的部分进行循环调用,最终实现对整体的处理。  EX:二分找K值、快速排序、归并排序四、贪心法  思想:每次求解的时候都去看当前的最佳解,每次贪心求最佳最后得到的总体的结...

算法笔记_048:找零问题(Java)【代码】【图】

目录1 问题描述2 解决方案2.1 动态规划法 1 问题描述现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < ... < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < ... < dm的硬币,其中d1 = 1,且每种硬币数量无限可得) 2 解决方案2.1 动态规划法本文编码思想参考自《算法设计与分析基础》第三版,具体讲解如下: 具体代码如下:package com.liuzhen.chapter8;publicclass ChangeMaking {publicvoid getChangeMakingN(int[] coi...

算法笔记_084:蓝桥杯练习 11-1实现strcmp函数(Java)【代码】【图】

目录1 问题描述2 解决方案 1 问题描述问题描述  自己实现一个比较字符串大小的函数,也即实现strcmp函数。函数:int myStrcmp(char *s1,char *s2) 按照ASCII顺序比较字符串s1与s2。若s1与s2相等返回0,s1>s2返回1,s1<s2返回-1。具体来说,两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇‘\0‘为止(注意‘\0‘值为0,小于任意ASCII字符)。如:  "A"<"B"  "a">"A"  "computer">"compare...

算法笔记--单调队列优化dp【代码】

单调队列:队列中元素单调递增或递减,可以用双端队列实现(deque),队列的前面和后面都可以入队出队。单调队列优化dp:问题引入:dp[i] = min( a[j] ) ,i-m < j <= i普通的做法是O(nlogn),但是当n很大是,这个复杂度就不行了,考虑用单调队列优化来达到O(n)。单调队列优化dp时维护的一般都是两个值{ id(下表),value(值)},且它们都保持单调。对于这个问题,我们维护一个两个值都单调递增的序列。查询:队首不断删除,直到...

【算法】一个小白的算法笔记: 归并排序算法的编码和优化 (,,? ? ?,,)【代码】【图】

参考资料《算法(第4版)》 — — Robert Sedgewick, Kevin Wayne 归并排序的概念归并排序的实现我是这样来描述的:先对少数几个元素通过两两合并的方式进行排序,形成一个长度稍大一些的有序序列。然后在此基础上,对两个长度稍大一些的有序序列再进行两两合并,形成一个长度更大的有序序列,有序序列的的长度不断增长,直到覆盖整个数组的大小为止,归并排序就完成了。 归并排序的两种实现方式:递归和循环归并排序有两...

数据结构与算法笔记 - 绪论【图】

数据结构与算法笔记 - 绪论 1. 什么是计算2. 评判DSA优劣的参照(直尺)3. 度量DSA性能的尺度(刻度)4. DSA的性能度量的方法5. DSA性能的设计及其优化x1. 理论模型与实际性能的差异x2. DSA优化的极限(下界) 计算机与算法计算机科学(computer science)的核心在于研究计算方法与过程的规律,而不仅仅是作为计算工具的计算机本身,因此E. Dijkstra及其追随者更倾向于将这门科学称作计算科学(computing science)。计算 = 信息处理计算...

算法笔记(一)--- 五大常用算法

分治动态规划贪心回溯分支界定几大算法的适用范围对比 一、分治分治,就是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。分治法常常跟递归一起使用,借助递归,我们可以方便地将问题分解再将结果合并。分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;递归:若子问题规模较小而容易被解决则直接解,否则递归...

算法笔记--二分【代码】

二分查找 对于递增序列,顺序查找的时间复杂度为O(n),如果序列太大,就很难承受在有序序列中,利用二分查找可以有效减少时间复杂度,其时间复杂度为O(logn)对于递增数列,二分查找如下:#include<cstdio> int binarySearch(int myArray[], int left, int right, int x){while(left <= right){int mid = (left + right) / 2;if(myArray[mid] == x)return mid;else if(myArray[mid] < x){left = mid + 1;}elseright = mid - 1;}retu...