算法
芭乐_0916
喜欢学习的人
展开
-
位数问题-在所有的n位数中,有多少个数中有偶数个数字3
一位数有 9 个:1 、 2 、 3 、 4 、 5 、 6 、 7 、 8 、 9。0 为什么不是一位数?转载 2022-08-27 16:42:37 · 1127 阅读 · 2 评论 -
排序算法的稳定性及其意义
稳定性的定义 假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。判断方法对于不稳定的排序算法,只要举出一个实例,即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需原创 2016-12-27 09:47:52 · 28991 阅读 · 3 评论 -
如何判断一个数是否是质数(C语言)-超详细
质数是只能被1或者自身整除的自然数(不包括1),称为质数。判断是否是质数最直观和简单的方法就是从2开始直接除,能除尽(余数为0)就不是质数。则C语言实现为:int isprime(int m){ int i; for(i=2;i if(m%i==0) return 0; else return 1;原创 2017-02-13 10:35:50 · 43640 阅读 · 3 评论 -
0-1背包问题
动态规划之0-1背包原创 2017-02-01 21:25:00 · 348 阅读 · 0 评论 -
马踏棋盘的实现
马踏棋盘是经典的程序设计问题之一,主要的解决方案有两种:一种是基于深度优先搜索的方法,另一种是基于贪婪算法的方法。第一种基于深度优先搜索的方法是比较常用的算法,深度优先搜索算法也是数据结构中的经典算法之一,主要是采用递归的思想,一级一级的寻找,最后找到合适的解。而基于贪婪的算法则是依据贪婪算法的思想设置一种标准,然后依据标准进行选择,从而得到解,但是他不一定能够得到最优解。 关于马转载 2017-03-10 13:32:50 · 385 阅读 · 0 评论 -
整数划分(C语言实现)
指把一个正整数n写成多个大于等于1且小于等于其本身的整数的和,则其中各加数所构成的集合为n的一个划分。这是一个典型的递归算法。所谓整数划分,是指把一个正整数n写成为其中,为正整数,并且;为n的一个划分。如果中的最大值不超过m,即,则称它属于n的一个m划分。这里我们记n的m划分的个数为转载 2017-05-05 11:04:22 · 6732 阅读 · 3 评论 -
稀疏矩阵的快速转置和乘法运算源代码(非常详细)
/*sparseMatrix.h*/#include "stdio.h"#include "stdlib.h"#define SIZE 100typedef struct{int i,j,val;}Trip;typedef struct{ Trip data[SIZE]; int row,col,num;}SMatrix;void creat原创 2017-11-29 08:20:04 · 2723 阅读 · 1 评论 -
求8+88+888+8888+88888+....前20项之和
在Java中,长整数(64位)8个字节,表示数的范围为-9223372036854775808-9223372036854775807,很明显20个8超出了长整型能表示的数据范围,因此要解决前20项的和用整型是不行的,需要定义字符数组,将加起来的每一位数都放在数组中。算法思想:首先将末位数相加,取余得到当前最后那位的数字,除以10,得到向高位进位的值,减少位数,直到0位。private s...原创 2019-03-04 15:53:33 · 2957 阅读 · 0 评论 -
熄灯问题
问题描述熄灯问题 有一个由按钮组成的矩阵,其中每行有6个按钮,共5行。每个按钮的位置上有一盏灯。当按下一个按钮后,该按钮以及周围位置(上边、下边、左边、右边)的灯都会改变一次。即,如果灯原来是点亮的,就会被熄灭;如果灯原来是熄灭的,则会被点亮。在矩阵角上的按钮改变3盏灯的状态;在矩阵边上的按钮改变4盏灯的状态;其他的按钮改变5盏灯的状态。 在上图中,左边矩阵中用X标记的按钮表示被...转载 2019-08-11 08:23:24 · 2696 阅读 · 0 评论 -
N皇后问题
N个皇后放在N*N的棋盘上,要求皇后不互相攻击。问皇后的摆法。皇后攻击的条件:同一列,或者在对角线上思想:采用递归。假设前面k-1个皇后都放好了,判定第k个皇后放置的位置代码:#include <cmath>using namespace std;int N;int queenPos[100]; //用来存放算好的皇后位置。最左上角是(0,0)void NQ...原创 2019-08-11 10:57:35 · 2250 阅读 · 0 评论 -
希尔排序-C语言实现
要点希尔(Shell)排序又称为缩小增量排序,它是一种插入排序。它是直接插入排序算法的一种威力加强版。该方法因DL.Shell于1959年提出而得名。希尔排序的基本思想是:把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。我们转载 2016-12-26 11:10:49 · 545 阅读 · 0 评论 -
计数排序-C语言实现
非常详细的计数排序说明,C语言完全实现,加详细注释原创 2016-12-19 11:10:44 · 6369 阅读 · 1 评论 -
二分图的判定(C语言)
二分图又称为二部图,其定义是:设G=(V,E)是一个无向图。如顶点集V可分割为两个互不相交的子集,并且图中每条边依附的两个顶点都分属两个不同的子集。则称图G为二分图。也就是说在二分图中,顶点可以分为两个集合X和Y,每一条边的两个顶点都分别位于X和Y集合中。它满足这样一个特性,即有两顶点集且图中每条边的的两个顶点分别位于两个顶点集中,每个顶点集中没有边相连接!如下图所示:无向图G为二分图原创 2016-12-10 20:46:43 · 3858 阅读 · 0 评论 -
最短路径dijkstra
在一个无权的图中,若从一顶点到另一顶点存在着一条路径,则称该路径长度为该路径上所经过的边的数目,它等于该路径上的顶点数减1。由于从一顶点到另一顶点可能存在着多条路径,每条路径上所经过的边数可能不同,即路径长度不同,我们把路径长度最短(即经过的边数最少)的那条路径叫做最短路径,其路径长度叫做最短路径长度或最短距离。 对于带权的图,考虑路径上各边上的权值,则通常把一条路径上所经原创 2016-12-12 16:29:16 · 448 阅读 · 0 评论 -
最短路径弗洛伊德Floyd(超详细)
图文并茂,超详细版的弗洛伊德算法原创 2016-12-12 17:32:50 · 5093 阅读 · 0 评论 -
有向无环图的最短路径
图文并茂,详解。原创 2016-12-13 15:54:29 · 6310 阅读 · 0 评论 -
求直方图中最大矩形面积(C语言实现)
一个直方图是由许多矩形组成,在给定的直方图中找出最大的矩形面积。同时,为了简化问题,假定所有矩形宽度都为1个单位。例如,下面的直方图中有6个矩形,高度分别是(6,7,8,4,5,3)。最大的矩形面积是18(如下图所示,最大矩形面积用红色方框标出)下面给出的解决方法时间复杂度为O(n)。矩形面积的计算公式为底*高。对于求直方图中的最大矩形面积。就是以某个矩形的高度为高,确定其左右原创 2016-12-07 20:20:50 · 5489 阅读 · 2 评论 -
对RMQ的理解
RMQ(Range Minimum/Maximum Query),即区间最值查询,即:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j复杂度为O(n)。但当数据量非常大且查询很频繁时,该算法无法在有效的时间内查询出正解。因此,可以用一种比较高效的在线算法(ST算法)来解决这个问题。所谓在线算法,是指用户每输入一个查询便马上处理一个查询。该算法一般用较长的时间做预处理,待信息充足以后便原创 2016-11-26 10:20:21 · 328 阅读 · 0 评论 -
LCA的离线算法
LCA(Least Common Ancestor),顾名思义,是指在一棵树中,距离两个点最近的两者的公共节点。也就是说,在两个点通往根的道路上,肯定会有公共的节点,我们就是要求找到公共的节点中深度尽量深的点。还可以表示成另一种说法,就是如果把树看成是一个图,这找到这两个点中的最短距离。Tarjan作为离线off-line算法,在程序开始前,需要将所有等待询问的节点对提前存储(非常重要,也是为什么原创 2016-11-28 11:58:55 · 528 阅读 · 0 评论 -
基数排序-C语言实现
基数排序(radix sorting)属于“分配式排序”(distribution sort),又称“桶子法”(bucket sort)的稳定性排序法。基数排序的方式可以采用最低有效位LSD(Least significant digital)或最高有效位MSD(Most significant digital)。LSD的排序方式将所有待比较数值统一为同样的数位长度,数位较短的数前面补零。原创 2016-12-23 10:52:55 · 1361 阅读 · 0 评论 -
无处不在的二分查找
大大减少比较次数的二分查找,大家可以看一下,自己写测试代码转载 2016-12-19 08:46:33 · 445 阅读 · 0 评论 -
有向图的强连通分支算法kosaraju(C语言实现)
在有向图G中,如果两个顶点vi,vj间有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(strongly connected)。如果有向图G的任意两个顶点都强连通,称G是一个强连通图。有向图的极大强连通子图(即:一个图的(强)连通子图,并且加入任何一个不在它的点集中的点都会导致它不再(强)连通。),称为强连通分量(strongly connected c原创 2016-12-09 21:47:36 · 3401 阅读 · 0 评论