数据结构与算法
文章平均质量分 88
albon_arith
欢迎交流
展开
-
线性表的顺序存储结构
//线性表的顺序存储结构 //记录学生信息 #include#include#includeusing namespace std;struct Stu{ string name; int age;};class Student{private: Stu stu[100]; int num;public: Student();原创 2010-03-04 10:15:00 · 648 阅读 · 0 评论 -
Matlab:BP神经网络,用于分类
BP神经网络,即向后传播算法。clear%p1,p2是训练数据p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.001.28,2.00;1.30,1.96];p=原创 2011-11-21 20:19:35 · 21251 阅读 · 3 评论 -
DNA序列分类:Fisher判别法
#include #include #include #define DNA_A 'a'#define DNA_T 't'#define DNA_C 'c'#define DNA_G 'g'#define DNA_AN 0#define DNA_TN 1#d原创 2011-08-15 16:19:39 · 3234 阅读 · 0 评论 -
DNA序列分类:模糊聚类分析
#include #include #include #define DNA_A 'a'#define DNA_T 't'#define DNA_C 'c'#define DNA_G 'g'int main(){ int length[20], num[20原创 2011-08-12 20:43:17 · 5263 阅读 · 1 评论 -
AOE网--求关键路径
求关键路径算法:①建立AOE网存储结构。②从源点v0出发,令ve[0]=0,按拓扑有序,求其余各顶点的最早发生时间ve[i]。如果得到的拓扑有序序列中顶点个数小于网中顶点个数n,说明网中有环,算法终止。③从汇点vn出发,令汇点的vl[n]=ve[n],按逆拓扑有序,求其余各顶点的原创 2010-11-30 20:15:00 · 2303 阅读 · 0 评论 -
Java:RS编码和纠错解码
package hustspy;public class RSCode { private static final int MM = 8; private static final int NN = 255; private static final int TT =原创 2011-08-04 10:41:53 · 4852 阅读 · 2 评论 -
灰色系统理论
grey system 华中科技大学控制科学与工程系教授,博士生导师邓聚龙于1982年提出的。灰色系统理论,利用少量信息,预测未知信息。clearclc%x为原始数据x=[161.07 154.07 149.95 147.15 146.11];x0 = zeros(5,1)原创 2011-07-28 10:19:42 · 2063 阅读 · 1 评论 -
启发式搜索-A*算法解决八数码问题
<br />代码如下:<br /> <br />From [Artificial Intelligence: A System Approach]<br /> <br />/*用启发式算法——A*搜索来解决八数码问题 */#include <stdio.h>#define MAX_BOARD 3*3#define MAX_DEPTH 22typedef struct BroadNode { int array[MAX_BOARD]; int g; int原创 2011-04-22 16:05:00 · 6587 阅读 · 0 评论 -
现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数
<br /> <br />现在有一个整数数组,已知一个数出现的次数超过了一半,请用O(n)的复杂度的算法找出这个数。<br />方法1:Hash链表<br />方法2:使用两个变量A和B,其中A存储某个数组中的数,B用来计数。开始时将B初始化为0。 <br />遍历数组,<br />如果B=0,则令A等于当前数,令B等于1;<br />如果当前数与A相同,则B=B+1;<br />如果当前数与A不同,则令B=B-1。<br />遍历结束时,A中的数就是要找的数。 <br />这个算法的时间复杂度是O(n),原创 2011-03-29 20:50:00 · 3696 阅读 · 2 评论 -
Matlab:向量量化学习网络
%向量量化学习网络clearclcp1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.001.28,2.00;1.30,1.96];p=[p1;p2]';pr=mi原创 2011-11-21 20:23:59 · 2354 阅读 · 0 评论 -
Sparks语言: 一种伪代码
SPARKS语言是一种不依赖具体计算机与具体程序设计语言的形式化语言,主要是用来描述或表达算法思想。1. 基本数据类型:整型、实型、布尔型、字符型integer x,y;double z,w;boolean a,b;char c,d;2. 赋值语句x将y的值赋给x3. 两个布尔值true false为了原创 2012-03-11 15:25:20 · 5882 阅读 · 2 评论 -
叉积、线段相交判断、凸包
一、叉积叉积的计算是线段方法的核心。对于向来p1和p2,叉积是由点(0,0)、p1、p2和p1+p2构成的平行四边形的有向面积。另一种与之等价但更有效的的叉积定义方式是将其看做矩阵行列式:p1×p2 = x1y2 - x2y1 = - p2×p1若p1×p2为正,则相对于原点(0,0)来说,p1位于p2顺时针方向;若p1×p2为负,p1位于p2逆时针方向;若为0则方向相同,原创 2013-09-04 17:35:32 · 9370 阅读 · 0 评论 -
短网址功能实现
先来看看短网址映射算法的理论(网上找到的资料)1)将长网址md5生成32位签名串,分为4段, 每段8个字节; 2)对这四段循环处理, 取8个字节, 将他看成16进制串与0x3fffffff(30位1)与操作, 即超过30位的忽略处理; 3)这30位分成6段, 每5位的数字作为字母表的索引取得特定字符, 依次进行获得6位字符串; 4)总的md5串可以获得4个6位串; 取里面的任意原创 2012-04-26 16:22:42 · 1511 阅读 · 0 评论 -
重建二叉树
根据中序遍历和前序遍历重建二叉树,同时验证是否合法。#include #include using namespace std;#define TREELEN 6struct Node{ Node* pLeft; Node* pRight; char value;};Node* rebuild(char *preOrder, char *inOrder, int原创 2012-12-31 10:00:47 · 888 阅读 · 0 评论 -
算法题<度度熊就是要刷排名第一>
程序:/** * 度度熊就是要刷排名第一*/#include #include #include #include #include using namespace std;// 存放最大的两个int first=1, second=0;inline void compute(int &first, int &second, int &tmp){ if(原创 2012-06-03 20:48:34 · 2191 阅读 · 0 评论 -
算法题<度度熊就是要第一个出场>
题目来源:http://baidu.openjudge.org/round1a/A/题目图片:http://hiphotos.baidu.com/hustspy222/pic/item/8cf8441a95cad1c863b010807f3e6709c83d514e.jpg程序:/**度度熊就是要第一个出场 * 程序未检测输入数据的合法性 */#include原创 2012-06-03 10:42:13 · 1510 阅读 · 0 评论 -
编程之美1.15节:构造数独算法-回溯法和置换法
1. 回溯法-程序/**回溯法 * 生成数独矩阵 * From 编程之美1.15*/#include #include /*要生成的数独矩阵个数*/#define SUDOKU_NUM 1/** * 函数is_digital_match * 检测sudoku[i][j]上的值是否符合要求*/int is_digital_match(int sudoku[][9原创 2012-04-16 10:34:20 · 7013 阅读 · 2 评论 -
最小生成树---克鲁斯卡尔kruskal算法---Simple one
1. C程序#include /*initial the matrix*/void ini_mat(int m[][10]){ m[0][1] = 7; m[0][2] = 3; m[0][3] = 4; m[1][2] = 5; m[1][3] = 4; m[1][4] = 200; m[1][5] = 100; m原创 2012-04-16 21:45:06 · 1020 阅读 · 0 评论 -
编程珠玑第一章,电话号码排序问题
/** 编程珠玑第一章,电话号码排序问题*/#include #include #include #include using namespace std;/*随机数产生函数* n 随机数产生范围(1,n)* m 输出的随机数的个数* arrayM是存放输出结果的整数数组*/void randInt(int n, int m, int arrayM[]原创 2012-03-07 11:14:12 · 1518 阅读 · 1 评论 -
回溯法-求n皇后问题
/*回溯法----n皇后问题 */#include #include int x[10000];/*判断x[k]是否符合要求*/int Place(int k){ int i; i=1; while(i0) { x[k]++; //移动到下一列 while(x[k]原创 2011-03-24 21:45:00 · 1067 阅读 · 0 评论 -
回溯法-子集和数问题
<br />/*回溯法-子集和数问题 */ #include <stdio.h>int M,n;int w[100];int x[100];void SumOfSub(int s, int k, int r){ //s=w[1]*x[1]+...+w[k-1]*x[k-1] //r=w[k]+...w[n] //w[i]需要按非降次序排列 int i; x[k]=1; for(i=1; i<=k; i++)原创 2011-03-24 23:13:00 · 10860 阅读 · 4 评论 -
图的邻接矩阵存储:深度、广度优先遍历
1. 邻接矩阵存储描述如下:#include #include #include "Queue.h"using namespace std;//图的邻接矩阵存储表示#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20typedef enum {DG, DN, UDG, UDN} GraphKind; //{有向图,有向网,无向图,无向网}typedef enum {OK, ERROR} Status;typedef struc原创 2010-11-28 22:21:00 · 11548 阅读 · 3 评论 -
C---求赫夫曼编码
#include #include #include typedef struct { int weight; int parent, lchild, rchild; }HTNode, *HuffmanTree; typedef char **HuffmanCode; void Huffmancoding(HuffmanTree &HT, H原创 2010-09-29 22:19:00 · 724 阅读 · 0 评论 -
二叉树的建立,遍历,线索化
二叉树是一种树型结构,它的特点是每个节点至多有两颗子树,并且,二叉树的子树有左右之分,其次序不能任意颠倒。 二叉树的性质: ①在二叉树的第i层上,至多有2的i-1次方个结点。 ②深度为k的二叉树至多有2的k次方-1个结点。 ③对任何一棵二叉树T,如果其终点节点数为n0,度为2的结点数是n2,则n0=n2-1。 二叉树的链式存储结构: typedef struct BiTNode { char data; int LTag,RTag;原创 2010-09-27 12:27:00 · 1009 阅读 · 0 评论 -
栈的链式存储结构
栈的链式表示,即链栈。由于栈的操作是线性表操作的特例,因此链栈可以看成运算受限的单链表。其特点如下: ①链栈无栈满问题,空间可扩充; ②插入和删除仅在栈顶处执行; ③链式栈的栈顶在链头; ④适合于多栈操作。 stackList.h #include class ListInt { public:原创 2010-04-09 13:18:00 · 1254 阅读 · 0 评论 -
队列的顺序存储结构
队列的顺序存储结构称为顺序队列,顺序队列实际上是运算受限的顺序表。与顺序栈类似,在队列的顺序存储结构中,用一组地址连续的存储单元一次存放从队列头到队列尾的元素。指针front和rear被分别用来队列头和队列尾元素的位置。在这里,我们设定初始化空队列时,front=rear=0;有新元素插入队列时,rear=rear+1;从队列中删除头元素时,front=front+1;当队列非空时,头指针指向头元原创 2010-04-09 19:18:00 · 1136 阅读 · 0 评论 -
栈的顺序存储结构
stackArray.h #include class StackArray { public: StackArray(int MaxStackSize=10); ~StackArray() {if(stack) delete stack;}; bool IsEmpty() con原创 2010-04-09 09:50:00 · 1125 阅读 · 0 评论 -
队列的链式存储结构
用链表表示队列,仅限制在表头删除和表位插入。有两个分别指向队头和队尾的头指针和尾指针。空的链队列的判决条件是,头指针和尾指针均指向头结点。queueList.h//队列的链式存储结构#include using namespace std; struct QueueData{ int age;}; class QueueNode{p原创 2010-04-15 20:36:00 · 2031 阅读 · 0 评论 -
线性表的链式存储结构
//线性表的链式存储结构 //记录学生信息 #include#include#includeusing namespace std;struct Stu{ string name; int age; Stu *next;};class Student{public: Stu *head;public: Student(); b原创 2010-03-04 19:17:00 · 624 阅读 · 0 评论 -
最小生成树算法---普里姆Prim算法
1. 邻接矩阵存储//图的邻接矩阵存储表示#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20typedef enum {DG, DN, UDG, UDN} GraphKind; //{有向图,有向网,无向图,无向网}typedef enum {OK, ERROR} Status;typedef struct ArcCell{ int adj; //顶点关系类型。对于无权图,用0或1表示相邻否。对于有权图,则为权值类型。 strin原创 2010-11-29 19:43:00 · 3104 阅读 · 1 评论 -
有向图--拓扑排序
拓扑排序方法:①从有向图中选一个没有前驱的顶点且输出之。②从有向图中删除该顶点和所有以他为尾的弧。重复上述两步,直至所有顶点已输出,或当期图中不存在无前驱的顶点为止。后一种情况说明有向图中有环!1. 采用邻接矩阵存储//图的邻接矩阵存储表示#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20typedef enum {DG, DN, UDG, UDN} GraphKind; //{有向图,有向网,无向图,无向网}typedef enum {OK,原创 2010-11-29 22:40:00 · 5124 阅读 · 2 评论 -
0-1背包问题——使用动态规划方法解决
/*背包问题——使用动态规划方法解决 */ #include void DKNAP_Pack(float p[], float w[], float M, int n, int x[]){ float P[1000],W[1000],pp,ww; int F[100]; int i,j,k,l,h,next,u; l = h = 1; F[0] = 1; P[1] = W[1] = 0; F[1] = n原创 2011-03-21 10:09:00 · 1458 阅读 · 0 评论 -
快速排序-应用
<br /> <br />问题:给一系列a1、a2.。。。an,要求找出其中两个数ai和aj,<br />使ai+aj=X,算法复杂度为O(nlogn)。<br />思路是:先快速排序<br />然后用i j 分别指向头,尾<br />比较ai+aj?X<br />如果ai+aj>X j-- <br />如果ai+aj<X i++<br /> <br /> <br />/*问题:给一系列a1、a2.。。。an,要求找出其中两个数ai和aj,使ai+aj=X,算法复杂度为O(nlogn)。思路是:原创 2011-03-19 21:25:00 · 884 阅读 · 0 评论 -
贪心方法-带有限期和收益的单位时间的作业排序贪心算法和背包问题
参考《计算机算法基础》华中科技大学版1. 带有限期和收益的单位时间的作业排序贪心算法/*带有限期和收益的单位时间的作业排序贪心算法 */#include /*算法1,复杂度O(n*n)*/void JS(int d[], int J[], int n, int &k){ /*终止时,d[J[i]] d[i] && d[J[r]] != r) r--; if(d[J[r]] r) { fo原创 2011-03-19 21:21:00 · 7901 阅读 · 1 评论 -
每对结点之间的最短路径——Floyd算法
<br />基本思想:动态规划<br /> <br />A[i][j] = min{A[i][j], A[i][k]+A[k][j]}<br /> <br />/*求每对结点之间的最短路径——Floyd算法 */#include <stdio.h>typedef struct Graph{ int cost[10][10]; int A[10][10];}MGraph;void ShortestPath_Floyd(MGraph &T, int n){原创 2011-03-20 18:43:00 · 1939 阅读 · 0 评论 -
内部排序
各种排序算法比较 排序方法 时间复杂度 空间复杂度 稳定性 复杂性 平均情况 最坏情况 最好情况 直接插入排序 O(n*n) O(n*n) O(n) O(1)原创 2010-11-23 19:37:00 · 643 阅读 · 0 评论 -
构造次优查找树
<br />#include <iostream>#include <math.h>using namespace std;typedef struct BiTNode{ int data; int LTag,RTag; //标志位,=1表示lchild或rchild指示结点的左右孩子,=0表示指示结点的前驱后继 struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;typedef BiTree原创 2010-12-01 15:40:00 · 2363 阅读 · 0 评论 -
最短路径算法-迪杰斯特拉Dijkstra算法
<br />1. 邻接矩阵存储有向网<br />//图的邻接矩阵存储表示#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20typedef enum {DG, DN, UDG, UDN} GraphKind; //{有向图,有向网,无向图,无向网}typedef enum {OK, ERROR} Status;typedef struct ArcCell{ int adj; //顶点关系类型。对于无权图,用0或1表示相邻否。对于有权图,原创 2010-11-30 22:23:00 · 1442 阅读 · 0 评论 -
最小生成树---克鲁斯卡尔kruskal算法
1. 邻接矩阵存储//图的邻接矩阵存储表示#define INFINITY INT_MAX#define MAX_VERTEX_NUM 20typedef enum {DG, DN, UDG, UDN} GraphKind; //{有向图,有向网,无向图,无向网}typedef enum {OK, ERROR} Status;typedef struct ArcCell{ int adj; //顶点关系类型。对于无权图,用0或1表示相邻否。对于有权图,则为权值类型。 strin原创 2010-11-29 23:34:00 · 1237 阅读 · 1 评论 -
降级熔断框架 Hystrix 源码解析:滑动窗口统计
一个滑动窗口统计主要分为两步:1. bucket 统计,bucket 的大小决定了滑动窗口滚动时间间隔;2. window 统计,window 的时长决定了包含的 bucket 的数目。Hystrix 实现滑动窗口利用了 RxJava 这个响应式函数编程框架。原创 2017-09-14 11:25:09 · 8559 阅读 · 2 评论