本文目录一览

1,数据结构中有哪些算法比较重要

基本:线性表,链表,栈,队列排序:快速排序,堆排序,归并排序,希尔排序,插入排序,选择排序二叉树:前序,中序,后序遍历,层次遍历,包括递归算法和非递归算法两种AVL树,Huffman编码二叉树和树,森林之间的转换,穿线树图算法:深度优先遍历算法,广度优先遍历算法,最小生成树,最短路径字符串:查找子串,KMP算法以上都是比较基本的算法,一定要弄懂
和二分查找性能接近的:既然可以二分查找,那么关键字肯定可以满足全序关系。那么可以用二叉查找树,一般的就是平摊o(logn),最坏o(n)。如果用平衡树,如avl,treap,splay等等,可以做到保持o(logn)的界。比二分查找性能更优的:大概只有hash了吧。如果hash函数设计的好,基本可以认为是o(1)的。这个你最好系统学习一下,尤其是字符串的hash函数。

数据结构中有哪些算法比较重要

2,ACM常用的经典算法

ACM国际大学生程序设计竞赛 亚洲区预选赛真题题解 电子工业出版社的
递归 5,二分思想有了.简单动态规划 背包等8.要是你喜欢几何的话也可以看看几何中的一些基础知识 我感觉几何比较难拿分接下可以学下线段树等一些数据结构(线段树可以优化很多问题,二叉树知道了,学数据结构的时候花点时间在二叉树上4.如果是计算机的,线段树的基本操作可以秒杀)接下去可以深入动态规划了.明白内存在算法中的用处2.广搜 深搜 做点隐式图的题目 顺便学下状态的hash6。接下去不归路在向你招手.二分查找 二分冥(a^b)3.最短路(spfa dij floyd) 我感觉可以当做搜索的优化71
《算法艺术与信息学竞赛》
《程序设计导引及在线实践》
快速排序 拓扑排序 最短图论 0-1背包问题 等等

ACM常用的经典算法

3,图像的特征提取都有哪些算法

常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征.颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质.一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献.由于颜色对图像或图像区域的方向、大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征.另外,仅使用颜色特征查询时,如果数据库很大,常会将许多不需要的图像也检索出来.颜色直方图是最常用的表达颜色特征的方法,其优点是不受图像旋转和平移变化的影响,进一步借助归一化还可不受图像尺度变化的影响,基缺点是没有表达出颜色空间分布的信息.
图像的特征可分为两个层次,包括低层视觉特征,和高级语义特征。低层视觉特征包括纹理、颜色、形状三方面。语义特征是事物与事物之间的关系。纹理特征提取算法有:灰度共生矩阵法,傅里叶功率谱法颜色特征提取算法有:直方图法,累计直方图法,颜色聚类法等等。形状特征提取算法有:空间矩特征等等高级语义提取:语义网络、数理逻辑、框架等方法

图像的特征提取都有哪些算法

4,如何不用递归遍历二叉树

非递归的方法是用存储代替计算,就是在建立树时,实现了存储展开,相当于存储了未来需要遍历的路径,所以就快了。递归是送快递,一层层往下递,非递归是先建好区域仓库,由各地仓库储存发货,所以速度更快,但需要仓库储存(内存占用更多)。二叉树遍历在数据结构中用得多,这种算法是从kb时代的内存来的,主要用于理解概念,提升编程时的思想用。实际用途中如果用于商业一般用数据库代替,根本用不到二叉树,是用存储代替计算。速度快,可以用内存数据库,如我用h2 database的Memory Mode 在java下可以实现1秒1百万次插入。用sqlite内存模式代替以前在c++需要手工管理的数据结构。数据量大一个电脑存不下时,用hadoop/spark/redis,对分布式大数据支持比较好。如果用于计算量大的任务或内核结构,可以用矩阵数组,链表,k/v这种比较直观模式存储。对于树和图这种在内存中复杂的数据结构,尽量不要在生产环境下使用,容易内存泄露,用简单方式代替。对于图结构,可以使用图数据库,如neo4j。对于树结构,可以在数据库中存储一棵树。实际上数据库的存储多用树,如B树、B-树、B+树、B*树。当然如果你写加密算法,这种要求极高的程序时,还是需要考虑性能最大化的,否则一般用存储代替遍历计算,因为内存和硬盘,现在很便宜了,而cpu还是一种宝贵的资源。
不用递归遍历,就使用栈好了。例如先序遍历的算法如下:push(根结点);while(栈不为空) p = pop() //出栈 //访问p //如果右子树不为空入栈右孩子 //如果左子树不为空入栈左孩子}

5,急急急数据结构中关于图的结构及相关算法 用类C语言 要源代码

(1)创建图的邻接矩阵和邻接表 (2)验证图的深度优先、广度优先遍历算法 (3)验证最短路径问题问题太多了,每个小问题,都可以写不少代码下面是问题1的代码,其他的问题,网上也很容易找到// 邻接矩阵表示 : #include #include #define INFINITY 0 #define MAX_VERTEX_NUM 10 //最大顶点数 #define MAX_EDGE_NUM 40 //最大边数 typedef enum typedef char VertexType; //顶点数据类型 typedef struct ArcCell int adj; //无权图,1或0表示相邻否;带权图则是权值。 //int *info; }ArcCell,AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct VertexType vexs[MAX_VERTEX_NUM]; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum,arcnum; //图的当前顶点数和弧数。 Graphkind kind; }MGraph; int LocateVex(MGraph G,VertexType v1) int i; for(i=0;i if(G.vexs[i]==v1) return i; return -1; } int CreatUDN(MGraph &G) // 采用数组表示法,构造无向网 G VertexType v1,v2; int w,j; cout< cin>>G.vexnum; cout< cin>>G.arcnum; for(int i=0;i cout< cin>>G.vexs[i]; } for(i=0;i for(j=0;j G.arcs[i][j].adj=INFINITY; } for(int k=0;k cout< cin>>v1>>v2; cout< cin>>w; i=LocateVex(G,v1); j=LocateVex(G,v2); G.arcs[i][j].adj=w; G.arcs[j][i].adj=G.arcs[i][j].adj; } return 1; } void dispMGraph(MGraph G) cout< for(int i=0;i for(int j=0;j cout< cout< } } void main() MGraph G; CreatUDN(G); dispMGraph(G); }// 邻接表 表示: #include #include #define MAX_VERTEX_NUM 20 //最大顶点数 #define MAX_EDGE_NUM 40 //最大边数 int visited[ MAX_VERTEX_NUM]; typedef int VertexType ; //顶点数据类型 typedef struct ArcNode int adjvex; int weight; struct ArcNode *nextarc; }ArcNode; typedef struct VNode VertexType data; ArcNode *firstarc; }VNode,AdjList[MAX_VERTEX_NUM]; typedef struct AdjList vertices; int vexnum,arcnum; int kind; }ALGraph; void CreateDG(ALGraph &G) int i,j,k; ArcNode *p; cout< cout<>G.vexnum;cout< cout<>G.arcnum; cout< for(i=0;i G.vertices[i].data=i; G.vertices[i].firstarc=NULL; } for(k=0;k cout< cin>>i>>j; p=(ArcNode*)malloc(sizeof(ArcNode)); p->adjvex=j; p->nextarc=G.vertices[i].firstarc; G.vertices[i].firstarc=p; } } void Disp(ALGraph G) int i,j; ArcNode *p; cout< for(i=0;i p=G.vertices[i].firstarc; j=0; while(p!=NULL) cout<adjvex< p=p->nextarc; j=1; } if(j==1) cout< } } void dfs(ALGraph G,int v) //深度优先遍历 ArcNode *p; cout< visited[v]=1; p=G.vertices[v].firstarc; while(p!=NULL) dfs(G,p->adjvex); p=p->nextarc; } return ; } void dfs1(ALGraph G) int i; for(i=0;i if(visited[i]==0) dfs(G,i); } void main() ALGraph G; CreateDG(G); int v; Disp(G); cout< cin>>v; cout< dfs1(G); cout< }补充:c和c++本来就差不了多少只需要把#include 换成#include 把cout换成printf,把cin换成scanf就能把上述c++的代码变化成c的啊
到www.csdn.net上去找,我传过深度遍历代码上去过
自己好好写写有好处!!!

文章TAG:图数据库  数据  数据库  哪些  图数据库有哪些算法  
下一篇