图数据库算法有哪些,静态图数据结构子图匹配算法有哪些
来源:整理 编辑:黑码技术 2024-05-05 06:53:29
本文目录一览
1,静态图数据结构子图匹配算法有哪些
直观点就是线路规划,流量分析之类的直观图结构问题. 广义来说很多包含关系对的逻辑结构都可以转化成图,比如匹配问题可以转化成二分图.
2,数据结构中有哪些算法比较重要
基本:线性表,链表,栈,队列排序:快速排序,堆排序,归并排序,希尔排序,插入排序,选择排序二叉树:前序,中序,后序遍历,层次遍历,包括递归算法和非递归算法两种AVL树,Huffman编码二叉树和树,森林之间的转换,穿线树图算法:深度优先遍历算法,广度优先遍历算法,最小生成树,最短路径字符串:查找子串,KMP算法以上都是比较基本的算法,一定要弄懂和二分查找性能接近的:既然可以二分查找,那么关键字肯定可以满足全序关系。那么可以用二叉查找树,一般的就是平摊o(logn),最坏o(n)。如果用平衡树,如avl,treap,splay等等,可以做到保持o(logn)的界。比二分查找性能更优的:大概只有hash了吧。如果hash函数设计的好,基本可以认为是o(1)的。这个你最好系统学习一下,尤其是字符串的hash函数。
3,图像的特征提取都有哪些算法
图像的特征可分为两个层次,包括低层视觉特征,和高级语义特征。低层视觉特征包括纹理、颜色、形状三方面。语义特征是事物与事物之间的关系。纹理特征提取算法有:灰度共生矩阵法,傅里叶功率谱法颜色特征提取算法有:直方图法,累计直方图法,颜色聚类法等等。形状特征提取算法有:空间矩特征等等高级语义提取:语义网络、数理逻辑、框架等方法常用的图像特征有颜色特征、纹理特征、形状特征、空间关系特征.颜色特征是一种全局特征,描述了图像或图像区域所对应的景物的表面性质.一般颜色特征是基于像素点的特征,此时所有属于图像或图像区域的像素都有各自的贡献.由于颜色对图像或图像区域的方向、大小等变化不敏感,所以颜色特征不能很好地捕捉图像中对象的局部特征.另外,仅使用颜色特征查询时,如果数据库很大,常会将许多不需要的图像也检索出来.颜色直方图是最常用的表达颜色特征的方法,其优点是不受图像旋转和平移变化的影响,进一步借助归一化还可不受图像尺度变化的影响,基缺点是没有表达出颜色空间分布的信息.
4,数据结构中图的建立及算法实现
#include<stdio.h>#include<stdlib.h>#define MaxSize 20struct ArcNode int adjvex; struct ArcNode *nextarc;};struct Vnode int data; struct ArcNode *firstarc;};struct Vnode AdjList[MaxSize];int m,n,v,cord;void main() void creatgraph(struct Vnode A[MaxSize]); void dfs(struct Vnode A[MaxSize]); do printf("\n 主菜单"); printf("\n 1 建立无向图的邻接表"); printf("\n 2 按深度遍历图"); printf("\n 3 结束程序运行"); printf("\n-----------------------------------"); printf("\n 请输入您的选择 1, 2, 3 -->"); scanf("%d",&cord); switch(cord) case 1: creatgraph(AdjList); break; case 2: dfs(AdjList); break; case 3: exit(0); } }while(cord<=3);}//main endvoid creatgraph(struct Vnode A[MaxSize]) int i,j,k; struct ArcNode *p; printf("input arces and vexes:"); scanf("%d %d",&m,&n); for(k=0;k<n;k++) printf("\ninput arc:"); scanf("%d%d",&i,&j); p=(struct ArcNode*)malloc(sizeof(struct ArcNode)); p->adjvex=j; p->nextarc=A[i-1].firstarc; A[i-1].firstarc=p; p=(struct ArcNode*)malloc(sizeof(struct ArcNode)); p->adjvex=i; p->nextarc=A[j-1].firstarc; A[j-1].firstarc=p; } printf("\n"); for(k=0;k<n;k++) printf("%d",A[k].data); p=A[k].firstarc; while(p) printf("%d",p->adjvex); p=p->nextarc; } printf("\n"); }}///creatgraph endvoid dfs(struct Vnode A[MaxSize]) struct ArcNode *p,*ar[MaxSize]; int x,i,y,top=-1; int visited[MaxSize]; for(i=0;i<n;i++) visited[i]=0; printf("\ninput x:"); scanf("%d",&x); printf("%d",x); visited[x-1]=1; p=A[x-1].firstarc; while((p)||(top>=0)) if(!p) p=ar[top]; top--; } y=p->adjvex; if(visited[y-1]==0) visited[y-1]=1; printf("->%d",y); p=p->nextarc; if(p) top++; ar[top]=p; } p=A[y-1].firstarc; } else p=p->nextarc; }}
5,图论中常见的最短路径算法有几种都是什么
主要是有三种、、第一种是最直接的贪心dijkstra算法、、可以利用堆数据结构进行优化、、缺点就是不能求有负权的最短路与判断负环、、第二种是bellman-ford算法、、根据松弛操作的性质是可以来判断负环的、、时间复杂度是O(nm)的、、第三种是SPFA算法、、把他单独拿出来作为一种算法并不是非常好的、、他的实质应该是上面的bellman-ford算法的队列优化时间复杂度更低、O(KE)、K的值约等于2、、算法 algorithm 算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。通俗点说,就是计算机解题的过程。在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。前者是推理实现的算法,后者是操作实现的算法。 一个算法应该具有以下五个重要的特征: 1、有穷性: 一个算法必须保证执行有限步之后结束; 2、确切性: 算法的每一步骤必须有确切的定义; 3、输入:一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定除了初始条件; 4、输出:一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的; 5、可行性: 算法原则上能够精确地运行,而且人们用笔和纸做有限次运算后即可完成。 算法的设计要求 1)正确性(correctness) 有4个层次: a.程序不含语法错误; b.程序对几组输入数据能够得出满足规格要求的结果; c.程序对精心选择的、典型的、苛刻的、带有刁难性的几组输入数据能够得出满足规格要求的结果; d.程序对一切合法的输入数据都能产生满足规格要求的结果。 2)可读性(readability) 算法的第一目的是为了阅读和交流; 可读性有助于对算法的理解; 可读性有助于对算法的调试和修改。 3)高效率与低存储量 处理速度快;存储容量小 时间和空间是矛盾的、实际问题的求解往往是求得时间和空间的统一、折中。 算法的描述 算法的描述方式(常用的) 算法描述 自然语言 流程图 特定的表示算法的图形符号 伪语言 包括程序设计语言的三大基本结构及自然语言的一种语言 类语言 类似高级语言的语言,例如,类pascal、类c语言。 算法的评价 算法评价的标准:时间复杂度和空间复杂度。 1)时间复杂度 指在计算机上运行该算法所花费的时间。用“o(数量级)”来表示,称为“阶”。 常见的时间复杂度有: o(1)常数阶;o(logn)对数阶;o(n)线性阶;o(n^2)平方阶 2)空间复杂度 指算法在计算机上运行所占用的存储空间。度量同时间复杂度。 时间复杂度举例 (a) x:=x+1 ; o(1) (b) for i:=1 to n do x:= x+1; o(n) (c) for i:= 1 to n do for j:= 1 to n do x:= x+1; o(n^2) “算法”一词最早来自公元 9世纪 波斯数学家比阿勒·霍瓦里松的一本影响深远的著作《代数对话录》。20世纪的 英国 数学家 图灵 提出了著名的图灵论点,并抽象出了一台机器,这台机器被我们称之为 图灵机 。图灵的思想对算法的发展起到了重要的作用。 算法是 计算机 处理信息的本质,因为 计算机程序 本质上是一个算法,告诉计算机确切的步骤来执行一个指定的任务,如计算职工的薪水或打印学生的成绩单。 一般地,当算法在处理信息时,数据会从输入设备读取,写入输出设备,可能保存起来以供以后使用。 这是算法的一个简单的例子。 我们有一串随机数列。我们的目的是找到这个数列中最大的数。如果将数列中的每一个数字看成是一颗豆子的大小 可以将下面的算法形象地称为“捡豆子”: 首先将第一颗豆子(数列中的第一个数字)放入口袋中。 从第二颗豆子开始检查,直到最后一颗豆子。如果正在检查的豆子比口袋中的还大,则将它捡起放入口袋中,同时丢掉原先的豆子。 最后口袋中的豆子就是所有的豆子中最大的一颗。 下面是一个形式算法,用近似于 编程语言 的 伪代码 表示 给定:一个数列“list",以及数列的长度"length(list)" largest = list[1] for counter = 2 to length(list): if list[counter] > largest: largest = list[counter] print largest 符号说明: = 用于表示赋值。即:右边的值被赋予给左边的变量。 list[counter] 用于表示数列中的第 counter 项。例如:如果 counter 的值是5,那么 list[counter] 表示数列中的第5项。 <= 用于表示“小于或等于”。 算法的分类 (一)基本算法 : 1.枚举 2.搜索: 深度优先搜索 广度优先搜索 启发式搜索 遗传算法 (二)数据结构的算法 (三)数论与代数算法 (四)计算几何的算法:求凸包 (五)图论 算法: 1.哈夫曼编码 2.树的遍历 3.最短路径 算法 4.最小生成树 算法 5.最小树形图 6.网络流 算法 7.匹配算法 (六)动态规划 (七)其他: 1.数值分析 2.加密算法 3.排序 算法 4.检索算法 5.随机化算法
文章TAG:
图数据库 数据 数据库 数据库算法 图数据库算法有哪些