![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
四块五同学
不去想是否能够成功,既然选择了远方,便只顾风雨兼程!
展开
-
《算法设计与分析》--时间复杂度和空间复杂度
1、时间复杂度(1)时间频度一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。(2)时间复杂度在刚才提到...转载 2019-07-02 22:04:07 · 2210 阅读 · 0 评论 -
《算法设计与分析》--最优二叉搜索树随笔
1、前言设S={x1,x2,x3,...,xn}是一个有序的集合,且其中的x1<x2....,其表示的是有序集S的二搜索树利用二叉树的结点存储有序集中的元素。2、性质存储于每个结点中的元素x大于其左子树中任一结点所存储的元素,小于右边结点存储的元素。其实二叉搜索树的叶子结点是和(Xi,Xi+1)的开区间。其实在二叉搜索树中搜索元素x,返回的结果存在两种的情形:(1)在二叉搜索...转载 2019-07-04 13:40:46 · 898 阅读 · 0 评论 -
《算法设计与分析》--贪心算法随笔
1、概述:当一个问题是具有最优子结构性质的时候,我们可以使用动态规划算法求解。但是有时候还是会存在更好的算法的。比如说我们举一个找硬币的例子。如果我们有四种用硬币。它们自制的面值分别是二角五分、一角、五分和一份。现在我们需要找给顾客6角3分钱,我们其实很自然的就会拿出2个二角五分的和1个一角的硬币和3个一分的硬币给顾客。事实上这种找硬币的方式比较的合理而且是最少的,这里我们首先说一下所用到的...原创 2019-07-10 11:57:48 · 289 阅读 · 0 评论 -
《算法设计与分析》--活动安排问题随笔
1、概述:活动安排问题是可以使用贪心算法求解的,该活动问题就是高效的安排一系列争用某一资源的活动。贪心算法这个时候就是尽可能多的兼容使用了公共的资源。2、举例:设有N个活动的集合E={1,2,...,n},其中每个活动都是要求使用同一个资源,但是在同一个时间内只能是由一个活动使用这个资源。该问题就是看活动是否相容的问题,设I和J两个活动,最后的目的就是在于Si>=Fj(i活动的开始时间...原创 2019-07-10 12:49:20 · 496 阅读 · 0 评论 -
《算法设计与分析》--哈夫曼编码随笔
1、概述:哈弗曼编码是广泛应用于数据文件压缩的十分有效的编码方法,该算法使用的是字符在文件中出现的频率来建立一个用0,1表示各个字符的最优表示方式。2、前缀码:对于每一个字符都要去规定一个0,1串代表其代码,并且要求每一个字符的代码都不是其他字符代码的前缀。所以对于上面的表中的给定的0,1串001011101我们可以唯一的分解成为0,0,101,1101,所以它的编码码为...原创 2019-07-11 09:35:07 · 774 阅读 · 0 评论 -
《算法设计与分析》--单源最短路径随笔
1、概述:其实就是给定我们一个带权的有向图G=(V,E),其中每条边的权是非负实数,并且给定V中的一个顶点源,其实就是计算顶点源到其他顶点的最短距离。2、算法的思想:狄杰斯特拉算法时解决该问题的一个比较好的贪心算法。我们可以设置一个顶点的集合S并且不断的做出贪心选择来扩充这个集合。最开始的时候集合S中只是仅仅含有源,设置u是G的某一个顶点,把从源到u且中间只是经过S中顶点的路成为从源到u的特...原创 2019-07-11 09:58:39 · 978 阅读 · 0 评论 -
《算法设计与分析》-最小生成树随笔
1、概述:设G=(V,E)是无向连通带权图,即一个网络。E中每条边(v,w)的权为c[v][w]。如果G的子图G~是一颗包含G的所有顶点的树,则称G~为G的生成树。并且生成树上面的各边权的总和称为该生成树的耗费。所以在所有的G的生成树中,消耗最小的生成树就是G的最小生成树。2、最小生成树性质:其中Prim和Kruskal算法都是可以看做设计贪心算法策略的例子。设G=(V,E)是一个连...原创 2019-07-11 10:34:11 · 1321 阅读 · 0 评论 -
《算法设计与分析》--《贪心算法》--随笔
1、定义:贪心算法其实就是自己通过一系列的选择得到问题的解,取数每次做的选择就是当前状态下局部最好的选择。尽管这种方式不一定能够获得最优解,但是在许多情况下是能够达到预期的目的的。活动安排问题就是典型的贪心算法。2、 性质:满足贪心算法求解必须满足贪心选择性质和最优子结构性质。3、和动态规划的区别:其实贪心算法就是通过所求问题的整体最优解可以通过一系列的局部最优的选择来达到...原创 2019-07-06 11:01:48 · 278 阅读 · 0 评论 -
《算法设计与分析》--《贪心算法》--最优装载随笔
1、最优装载的目的:有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受到限制的时候,尽量能多装吧。。2、形式化的描述:max{(Wi*Xi)(求和)<=C,其中x属于{0,1} ,1<=i<=n;(Wi*Xi求和,并且取最大值)3、算法描述如下:使用贪心算法求解:public static float loadin...原创 2019-07-06 11:21:44 · 453 阅读 · 0 评论 -
《算法设计与分析》--汉诺塔问题和斐波那契数列问题随笔
1、下面直接列出大体的算法伪代码:Hanoi(A,B,n-1);Move(A,C);Hanoi(B,C,n-1);分析:对于上面的Hanoi方法中的参数详解,一共不是三个柱子吗?A、B、C,设一共有着n个盘子在A柱子上面。第一个函数代表着把A柱子上面的n-1个盘子从A柱子移动到B上面(除开最下层的那个盘子,意思就是剩了一个最大的盘子在最下层)。第二个move函数就是代表着...原创 2019-07-07 09:41:08 · 445 阅读 · 1 评论 -
Java程序员面试必备排序算法
20分钟手写6大常考面试排序算法:由于是手写,不耽搁时间,自己练手的,就不写注解了。1、选择排序//选择排序public static void selectSort(int[] arr){ for(int i = 0;i<arr.length-1;i++){ for(int j = i+1;j<arr.length;j++){ if(arr[i] >...原创 2019-07-07 09:47:00 · 561 阅读 · 2 评论 -
《算法设计与分析》--主定理和递归树随笔
先了解一些有关符号渐进符号渐进符号 非渐进符号 含义 f(n)=O(g(n))f(n)=O(g(n)) f(n)≤cg(n)f(n)≤cg(n) g是f的上界 f(n)=o(g(n))f(n)=o(g(n)) f(n)<cg(n)f(n)<cg(n) g是f的严格上界 f(n)=Ω(g(n))f(n)=Ω(g(n)) f(...转载 2019-07-07 10:41:07 · 893 阅读 · 0 评论 -
汉诺塔Java简单版本
1、概述:汉诺塔这个问题相信是很多初入递归的同学们都遇到的一个稍微有一些入门难度的问题。在这里贴出代码简单解析一下,这个问题只要想通了就知道递归解法非常好做,想不通就比较纠结,多想想还是可以的!2、代码段package com.algorithm;/** * Created by yuanfeng on 2019/7/16 13:05 */import java.util...原创 2019-07-16 13:47:14 · 256 阅读 · 0 评论 -
牛客网《剑指offer》题解--Java版
目录1、二维数组中的查找1.1 知识点和限制条件1.2题目描述1.3 代码段2、替换空格2.1 知识点和限制条件2.2 题目描述2.3 代码段3、从尾到头打印链表3.1知识点和限制条件3.2题目描述3.3代码段3.4 思路解析4、重建二叉树4.1知识点和限制条件4.2题目描述4.3 代码段4.4 ...原创 2019-07-23 22:56:47 · 2624 阅读 · 0 评论 -
《算法设计与分析》八皇后问题
1、题目描述:在8x8的国际象棋上面摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行,同一列或者同一条斜线上,请问有多少种摆法?当时高斯先生计算说有76种,但是最后有92种。2、代码解析(递归)步骤:分解为两个子问题,首先在第一行放置一个棋子,第二在其他安全的不被攻击的地方放第二个棋子,以此类推。结束条件:放完第八个棋子就结束了。package co...原创 2019-07-17 11:15:05 · 1271 阅读 · 1 评论 -
《算法设计与分析》--骑士周游--马踏棋盘问题
1、概述:马踏棋盘问题也称为骑士周游问题,这是算法设计分析比较经典的问题之一。2、 题目要求:这里是以国际象棋的棋盘8*8的方格棋盘,现在将“马”放在任意指定的方格的方格中,按照马走棋盘的规则将马进行移动。并且要求每个方格只能进入一次,最终让“马”走遍64个方格。3、:编写代码:要求使用1~64来标注马移动的路径。棋盘下图所示要解这个算法需要用到的知识点:回溯法、深度优...原创 2019-07-21 15:06:56 · 987 阅读 · 0 评论 -
Java程序员面试必备的算法笔试题--详解
目录2、杨辉三角形的打印2.1代码段2.2运行结果3、求阶乘 代码段3.1、结果图示2、杨辉三角形的打印这个问题的关键求解步骤就是分析出来一个规律。某一项等于它的竖直方向上的前一项+竖直方向前一项的左边个项的值!二维数组简单表示为arr[i][j] = arr[i-1][j]+arr[i-1][j-1]2.1代码段package co...原创 2019-07-21 18:00:19 · 936 阅读 · 1 评论 -
《算法设计与分析》--0-1背包问题随笔
1、0-1背包问题定义:给定n种物品和一背包。物品i的重量是Wi,其价值为Vi,背包的容量为C。探究我们怎么选择装入背包的物品使其背包中的总价值最大?2、思考:我们在装入背包的时候对于要装入的物品i,只有两种情况,即装入和不装入背包。并且我们不能将物品i装入背包多次,也不能只是装入部分的物品i。3、最优子结构性质:0-1背包问题也是满足最优子结构性质的,我们首先给定C>0,Wi>...原创 2019-07-04 13:27:58 · 662 阅读 · 1 评论 -
《算法设计与分析》--流水作业调度随笔
转自:https://blog.csdn.net/hlk_1135/article/details/53872064n个作业{0,1,2,…,n}在2台机器上M1和M2组成的流水线上完成加工。每个作业加工的顺序都是先在M1上加工,后在M2上加工。在两台机器上加工的时间分别为ai和bi。目标:确定这n个作业的加工顺序,使得从第一台作业开始加工,到最后一个作业完成加工所需要的时间最少。题目...转载 2019-07-04 11:54:30 · 484 阅读 · 0 评论 -
《算法设计与分析》--电路布线随笔
转自:https://blog.csdn.net/liufeng_king/article/details/86714071、问题描述:在一块电路板的上、下两端分别有n个接线柱。根据电路设计,要求用导线(i,π(i)) 将上端接线柱i与下端接线柱π(i)相连,如下图。其中,π(i),1≤ i ≤n,是{1,2,…,n}的一个排列。导线(I, π(i))称为该电路板上的第i条连...转载 2019-07-04 11:35:21 · 1316 阅读 · 0 评论 -
《算法设计与分析》--递归算法的理解
其实递归算法就是一个方法不断的调用自己的问题,是一种不断直接或者间接的调用自己的一种思想。 其实我们在使用递归的时候需要注意到一个问题就是栈的溢出,因为本身递归算法要是自己不控制好退出条件的话很容易出现栈的溢出。 递归本身包含很重要的两个部分: 定义出口:这个递归出口将解决什么时候停止调用自己的问题,如果没有递归的出口,将会导致方法一直循环调用自己导致溢出。 递归体:就是不断的进行递归的...原创 2019-07-03 09:47:25 · 295 阅读 · 0 评论 -
《算法设计与分析》--分治法的理解
就个人而言,本身我觉得这个问题都属于人们经过了大量的经验所总结出来的,所以其实我们在分解子问题的时候最好把问题的规模设计为大小都差不多的,通俗的来说:就是把一个问题分解成为大小相同的k个子问题是比较不错的。(事实上这种使子问题大致相同的做法是一种自平衡子问题的思想)。定义:分治法的思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。 解...原创 2019-07-03 10:19:51 · 733 阅读 · 0 评论 -
《算法设计与分析》--大整数随笔
sq原创 2019-07-03 10:33:45 · 144 阅读 · 0 评论 -
《算法设计与分析》--矩阵乘法随笔
矩阵乘法:矩阵乘法是线性代数中最常见的问题,在数值计算中应用的非常的广泛,设A和B为两个2个n*n的矩阵,它们的乘积同样是n*n的矩阵。并且矩阵乘法使用的还是大整数的那种分治法的思想。矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义[1]。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行...转载 2019-07-03 10:43:38 · 1115 阅读 · 0 评论 -
《算法设计与分析》--棋盘覆盖问题随笔
棋盘覆盖问题概念:在一个2^k * 2^k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。显然,特殊方格在棋盘上面出现的位置有4的k次方种可能。棋盘覆盖问题是指,要用4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。解决办法:使用分治法解决棋盘覆盖的问题,不断的递归这种方法,直到棋盘简化为1x1...原创 2019-07-03 11:04:14 · 819 阅读 · 0 评论 -
《算法设计与分析》--合并排序随笔
合并排序:合并排序其实也叫做归并排序,只是叫法不一样罢了,本质还是使用分治的思想实现对n个元素进行排序的算法,其基本思想是:将待排序的元素分解为大致相同的两个子数组,分别对两个子集合进行排序,最终将排好序的字数组进行合并,最终达到整个数组有序的过程。程序代码如下://递归拆分排序public static int[] gbSort(int[] arr,int low,int high)...原创 2019-07-03 11:26:42 · 636 阅读 · 0 评论 -
《算法设计与分析》--快速排序随笔
快速排序:快排是一种基于分治策略的一个排序算法,其基本的思想是对于输入的子数组a[p:r]可以按照分解、递归求解、合并进行解决。分解:以a[p]为基准的元素将a[p:r]切分成3段,a[p:q-1],a[q]和a[q+1:r],这样就可以使得 a[p:q-1]中任何元素小于a[q],a[q+1]中任何元素都大于a[q]。递归求解:递归调用快速排序算法,分别递归对a[p:q-1]和a[q+1...原创 2019-07-03 12:46:40 · 347 阅读 · 1 评论 -
《算法设计与分析》--线性时间选择随笔
定义:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素。(1)在某些特殊情况下,很容易设计出解选择问题的线性时间算法。如:当要选择最大元素或最小元素时,显然可以在O(n)时间完成。(一趟比较即可)(2)一般的选择问题,特别是中位数的选择问题似乎比最小(大)元素要难。但实际上,从渐近阶的意义上,它们是一样的。也可以在O(n)时间完成。线性时间选择方法一:r...转载 2019-07-03 13:22:13 · 1113 阅读 · 0 评论 -
《算法设计与分析》--最接近点对问题
1、最接近点对问题的定义给定平面上面的n个点,找其中的一对点,使得在n个点组成的所有点对中,该点对间的距离最小。2、最接近点的分析事实上,最接近点的对数有可能是多余一对的,其实按照简单来说我们可以只找到其中的一对点来进行求解问题足矣。其实只要将每一点和其他n-1个点的距离算出来,找出达到最小距离的两点即可。但是其实这个效率比较低下。3、改进思想首先我们可以想到分...原创 2019-07-03 13:40:06 · 3050 阅读 · 1 评论 -
《算法设计与分析》--循环赛日程表
1、概述:其实现在分治法用的地方非常的多,分而治之,递归解决可以帮助我们提升解决问题的效率2、例子:设有n=2的k次方个运动员要进行网球的循环赛,现在需要射击一个满足以下要求的比赛日程表:(1)每个选手必须与其他n-1个选手各赛一次;(2)每个选手一天只能赛次:(3)循环赛一共进行n-1天; 3、解决方法:按照这个要求可以将比赛的日程表射击成有n行和n...原创 2019-07-03 14:03:42 · 1043 阅读 · 1 评论 -
《算法设计与分析》--动态规划算法随笔
1、动态规划算法的定义其实道理上来说动态规划算法和分治法是相类似的,其实都是将基本待求解的问题分解成若干个子问题,先求解子问题,然后再从这些子问题中得到原问题的解。与分治法的不同点在于使用动态规划求解的这类问题的子问题往往不是互相独立的,若果是使用分治法解这类问题,则分解得到的子问题数目太多。2、比较分析我们在使用分治法求解时,有些子问题已经被重复计算了许多次。要是我们提前可以...原创 2019-07-04 11:37:52 · 191 阅读 · 1 评论 -
左程云:程序员该如何学习算法?
转自:https://blog.csdn.net/u013899655/article/details/79014111大家好,我是左程云。我本科就读于华中科技大学、硕士毕业于在芝加哥大学。先后在IBM、百度、GrowingIO和亚马逊工作,是一个刷题7年的算法爱好者。我是《程序员代码面试指南--IT名企算法与数据结构题目最优解》的作者 ,书籍涉及算法与数据结构编程题目240道以上,...转载 2019-07-13 08:14:29 · 225 阅读 · 0 评论 -
《算法设计与分析》--最长公共子序列随笔
1.定义一个给定序列的子序列是在该序列中删去若干元素后得到的序列。例如,序列Z={B,C,D,B}是序列X={A,B,C,B,D,A,B}的子序列,相应的递增下标序列为{2,3,5,7}。给定两个序列X和Y,当另一个序列Z既是X的子序列又是Y的子序列时候,称Z是序列X和Y的公共子序列。例如,如果X={A,B,C,B,D,A,B},Y={B,D,C,A,B,A},序列{B,C,A}是X...原创 2019-07-04 10:38:33 · 491 阅读 · 1 评论 -
《算法设计与分析》--凸多边形最优叁角剖分随笔
其实本质上来说这个问题算是一个几何问题了,但是还是和动态规划算法中的最优计算次序问题非常的雷同。多边形本身是由封闭的首尾相连的封闭线段曲线组成。包围在多边形内部的所有点称为多边形的内部;多边形本身构成了一个多边形的边界;其余的就是属于多边形的外部了。一个简单的多边形和内部构成了闭凸集时,就称这个为一个凸多边形。定义:多边形的三角剖分就是将多边形分隔成为互不相交的三角形的弦的集合T。凸多...原创 2019-07-04 10:51:38 · 174 阅读 · 0 评论 -
《算法设计与分析》--多边形游戏随笔
定义:多边形游戏是一个由n个顶点构成的多边形。每个顶点被赋予了一个整数值,每条边被赋予一个运算符+或者*,所有边依使用整数从1到n编号。步骤:游戏第一步,删除一条边。接下来的n-1步按照如下操作:(1)选择一条边E以及由E连接着的两个顶点V1和V2;(2)用一个新的顶点取代边E以及由E连接着的两个顶点V1和V2.将由顶点V1和V2的整数值通过边E上面运算得到的结果赋予一个新顶点。当...原创 2019-07-04 11:01:12 · 640 阅读 · 0 评论 -
《算法设计与分析》--图像压缩随笔
我们在计算机中国通常是使用的像素点的灰度值序列{p1,p2,p3,p4,...,pn}表示图像。pi表示的是像素点i的灰度值。灰度值的范围是在0~255.因此,需要使用8位表示一个像素。图像的压缩就是将所给的像素点序列{p1,p2,p3..}分割成为m个连续的段S1,S2,...Sm。目标:图像压缩的问题就是要求确定像素序列{p1,p2,p3,...pn}的最优分段,使得依次分段所需的存储...原创 2019-07-04 11:27:38 · 1252 阅读 · 0 评论 -
c语言版本的最小生成树(Prim算法)概述
1、Prim算法概述:图论中的一种算法,可在加权连通图里搜索最小生成树。意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)),且其所有边的权值之和亦为最小。2、最小生成树:一个有 n 个结点的连通图的生成树是原图的极小连通子图,且包含原图中的所有 n 个结点,并且有保持图连通的最少的边。最小生成树可以用kruskal(...原创 2019-07-22 09:49:39 · 1909 阅读 · 0 评论