ISSN: 2319 - 9873
助理教授CSE, HITAM,海得拉巴,印度
收到日期:22/01/2016;接受日期:19/03/2016;发表日期:16/04/2016
访问更多的相关文章研究和评论:工程和技术雷竞技苹果下载杂志》上
搜索是一个发现的过程是否属于搜索空间的一个关键要素。提出了矩阵搜索算法使用二进制搜索树需要无序矩阵的顺序(mxn和搜索关键因素作为输入,结构两种二叉搜索树BST1下三角矩阵的对角元素和BST2上三角矩阵的输入矩阵的对角元素除外。关键因素是BST1搜索,如果发现是BST2搜索,返回true,否则关键要素如果发现返回true,否则返回False。我遵循了软件开发生命周期的不同阶段来展示该搜索算法。节中,我介绍了算法。在第二部分中,提出的算法进行了分析和设计。在第三部分,算法是使用C编程语言实现。在第四节,我测试了算法的实现使用不同的测试用例。第五节,我认为该算法。
二进制搜索算法、矩阵,,编程语言。
搜索是一个发现的过程是否属于搜索空间的一个关键要素。有许多搜索算法搜索搜索空间中的一个关键要素。每个算法都有自己的优点和缺点。提出了矩阵搜索算法使用二进制搜索树需要矩阵的顺序(mxn和搜索关键元素作为输入。它构造两个二叉搜索树BST1和BST2使用元素的输入矩阵。BST1由使用下三角矩阵构造包括输入矩阵的对角元素和BST2采用上三角矩阵输入矩阵的对角元素除外。在该算法中,我将矩阵划分为两个部分,下三角矩阵和上三角矩阵。每个部分的矩阵,构造一个二叉搜索树。第一个关键要素是搜索BST1从根节点,如果发现算法返回true,否则关键元素是搜索BST2从根节点,如果发现算法返回true,否则将返回false。我用二叉搜索树的搜索算法搜索在BST1和BST2关键元素。给定的关键元素是在BST1第一次搜索,如果没有找到相同的关键元素是BST2搜索,如果发现返回true,否则返回false。利用算法的搜索时间关键要素是O (log xy) x BST1和y的节点的数目是BST2的节点的数量。时间构造给定的输入矩阵的两种二叉搜索树的元素是O (mn),其中m是输入矩阵的行数,n是输入矩阵的每行的列数。
图1显示的搜索在未排序的关键元素矩阵麦根的秩序。首先给定的输入矩阵的顺序(mxn分为两个部分。矩阵下三角矩阵的第一部分包括矩阵的对角元素和第二部分是上三角矩阵对角线元素除外。两个二叉搜索树BST1和BST2由使用矩阵的两个部分。BST1由使用矩阵的第一部分和BST2由使用矩阵的第二部分。关键因素是BST1搜索,如果发现是BST2搜索,返回true,否则关键要素如果发现则返回true,否则将返回false。
图2显示未分类的输入矩阵的转换顺序3 x3为两个二叉搜索树。给定的输入矩阵由9元素{{1 4 3},{7 8 6},{2 5 9}}。它分为两个部分。第一部分是下三角矩阵包括对角元素,其中包含6个元素{1 7 8 2 5 9}。第二部分是上三角矩阵对角线元素除外,包含3元素{4 3 6}。使用矩阵的第一部分的元素,二叉搜索树BST1构造和使用的第二部分矩阵的元素,BST2构造。在BST1 5是搜索关键元素,返回true自5属于BST1关键元素。6是搜索BST1但元素6关键元素不属于BST1,所以关键元素6 BST2搜索,返回true自6属于BST2关键元素。
算法1.1 BST1内搜索的一个关键元素,如果发现是BST2搜索,返回true,否则关键要素如果发现返回true,否则返回false。需要BST1根节点,根节点的BST2和搜索关键因素作为输入(1]。
矩阵算法搜索(tree1 tree2,键){l
/ / tree1 BST1的根节点
/ / tree2 BST2的根节点
/ /关键元素是麦根搜索内输入矩阵的顺序
而(tree1 ! = NULL){/ /如果tree1不是空节点
如果(tree1 - >数据= =键)/ /如果关键元素等于BST1元素的节点
返回True;/ /关键元素BST1内发现
else if(关键< tree1 - >数据)/ /如果关键元素小于BST1元素的节点
tree1 = tree1 - >左;/ /搜索关键元素在BST1当前节点的左子树
/ /如果其他关键因素大于BST1元素的节点
tree1 = tree1 - >正确;}/ /搜索关键元素在BST1当前节点的右子树
而(tree2 ! = NULL){/ /如果tree2不是空节点
如果(tree2 - >数据= =键)/ /如果关键元素等于BST2元素的节点
返回True;/ /关键元素BST2内发现
else if(关键< tree2 - >数据)/ /如果关键元素小于BST2元素的节点
tree2 = tree2 - >左;/ /搜索关键元素在BST2当前节点的左子树
/ /如果其他关键因素大于BST2元素的节点
tree2 = tree2 - >正确;}/ /搜索关键元素在BST2当前节点的右子树
返回错误;/ /没有找到BST1和BST2关键元素
}
1.1算法搜索在BST1和BST2关键元素
让米BST1的节点数量,n是BST2的节点数量,T (m, n)搜索的一个关键元素是时间内输入矩阵,f (m)内时间搜索的一个关键元素BST1和g (n)的时间搜索BST2中的一个关键元素。
f (m) = f (m / 2) +一个
f (m) = f (m / 4) + 2
f (m) = f (m / 8) + 3
f (m) = f (m / 23) + 3
f (m) = f (m / 2 k) +卡
让m = 2 k m k =日志
f (m) = f(1) +一个日志
f (m) =日志m = O (log)
g (n) = g (n / 2) +一个
g (n) = g (n / 4) + 2 a
g (n) = g (n / 8) + 3
g (n) = g (n / 23) + 3
g (n) = g (n / 2 k) +卡
让n = 2 k k = o (log n)
g (n) = g (1) + o (log n)
g (n) = O (log n) = O (log n)
由算法1.1
T (m, n) = f (m) + g (n)
T (m, n) =日志日志mn m + o (log n) =
T (m, n) = O (log mn)
算法1.2构造两个二叉搜索树BST1 BST2。BST1由使用下三角矩阵包括输入矩阵的对角元素的顺序(mxn和BST2构造采用上三角矩阵除输入矩阵的对角元素的顺序(mxn [2,3]。
算法ConstructTrees (tree1 tree2, [] [], m, n) {
/ / tree1 BST1的根源,由使用下三角矩阵包括输入矩阵的对角元素/ /麦根,tree2 BST2的根源,由使用上/ /三角矩阵对角线元素除外,[][]是一个输入无序矩阵麦根,/ / m矩阵的行数和n是矩阵的每行的列数。
(= 1;行< = m;行=行+ 1)
(col = 1;坳< =行;坳=坳+ 1)
插入(&tree1(行)(col));/ /插入下三角矩阵元素包括矩阵的对角元素/ /到BST1二叉搜索树
(行= m - 1;行> = 1;行=第一行)
卡扎菲(col = n; >行;坳= col-1)
插入(&tree2(行)[坳]);/ /插入上三角矩阵对角线元素不包括/ /矩阵转化为二叉搜索树BST2的元素
}
1.2算法构造二叉搜索树BST1 BST2
算法1.2将矩阵划分为两个部分。第一部分是下三角矩阵包括对角元素,第二部分是上三角矩阵对角元素除外。时间构造BST1通过使用矩阵mn的第一部分!,since first part of matrix contains m rows and each row contains number of columns equal to row index. The time taken to construct BST2 by using second part of matrix is (m-1)(n-1)!, since second part of matrix contains (m-1) rows and each row contains number of columns equal to (row-1) index. The overall time taken by Algorithm 1.2 is as follows:
T (m, n) = mn !+ (m - 1) (n - 1) !
T (m, n) = mn !+ m (n - 1) !- (n - 1) != mn !
T (m, n) = O (mn)
提出了矩阵使用二叉搜索树搜索算法是实现通过使用C编程语言(3),这是一个健壮的、面向结构的编程语言,它提供了不同的概念功能,指针,结构、数组等,适用于实现算法。
/ *实现矩阵的搜索算法利用二叉搜索树* /
# include < stdio . h >
# include < conio.h >
{/ /结构节点结构二叉搜索树的节点
int数据;
结构节点*,*;
};
结构节点* tree1 = NULL, * tree2 =零;/ /根节点BST1 BST2
int [10] [10], n;/ /输入nxn矩阵的顺序
空隙插入(struct节点* * p, int避署){/ /元素插入二进制搜索树
如果((* p) = = NULL){/ /如果当前节点是空的
(* p) = (struct节点*)malloc (sizeof (struct节点));/ /创建新节点在BST
(* p) - >数据=避署;/ /元素到新的节点BST的地方
(* p) - >左=零;/ /左子树的节点是空的
(* p) - >右=零;/ /右子树的节点是空的
}else if(避署< (* p) - >数据)/ /如果元素小于当前节点的BST
插入(& ((* p) - >左)避署);/ /元素插入到当前节点的左子树BST
else if(避署> (* p) - >数据)/ /如果元素大于当前节点的BST
插入(& ((* p) - >右),避署);/ /元素插入到当前节点的右子树的BST
}
int MatrixSearch (int键){/ /搜索在BST1和BST2关键元素
结构节点* temp = tree1;
而(临时! = NULL) {/ / BST1内搜索关键元素
如果(temp - >数据= =键)/ /如果发现关键元素在BST1然后返回true返回1;
else if(关键< temp - >数据)/ /如果关键元素小于BST1元素的节点
temp = temp - >左;/ /搜索关键元素在BST1当前节点的左子树
/ /如果其他关键因素大于BST1元素的节点
temp = temp - >正确;}/ /搜索关键元素在BST1当前节点的右子树
temp = tree2;
而(临时! = NULL) {/ / BST2内搜索关键元素
如果(temp - >数据= =键)/ /如果发现关键元素在BST2然后返回true返回1;
else if(关键< temp - >数据)/ /如果关键元素小于BST2元素的节点
temp = temp - >左;/ /搜索关键元素在BST2当前节点的左子树
/ /如果其他关键因素大于BST2元素的节点
temp = temp - >正确;}/ /搜索关键元素在BST2当前节点的右子树
返回0;}/ /如果没有找到关键元素在BST1和BST2然后返回false
空白ConstructTrees(){/ /构造给定的输入矩阵的两个二叉搜索树的元素int行,上校;
(= 1;行< = n;行+ +)
(< =行;坳坳= 1;坳+ +)
插入(&tree1(行)(col));/ /将元素插入BST1使用下三角矩阵/ / nxn包括输入矩阵的对角元素的顺序
(行= n - 1;行> = 1;行——)
卡扎菲(col = n; >行;坳,)
插入(&tree2(行)(col));}/ /元素插入BST2使用上三角矩阵/ /不含nxn输入矩阵的对角元素的顺序
void main () {
int i, j键;
clrscr ();
printf (" \ nSorting秩序nxn矩阵,输入n值:\ n”);
scanf (“% d”, n);
printf(" \整体% d矩阵的元素:\ n, n * n);
(i = 1;我+ +)< = n;
(j = 1; < = n; j + +)
scanf (“% d”,和[我][j]);/ /元素解读nxn输入矩阵的顺序
ConstructTrees(); / /构造两种二叉搜索树的输入矩阵的元素
printf(" \整体搜索关键元素:\ n”);
scanf (“% d”,关键);/ /阅读关键元素内搜索输入矩阵
如果(MatrixSearch(关键)= = 1)/ /如果属于关键元素输入矩阵
printf (" \ nelement % d发现”,键);
其他/ /如果不存在关键元素,在输入矩阵
printf (" \ nelement % d找不到”,键);
getch ();}
矩阵的顺序程序搜索关键要素(mxn使用算法。
不同的测试用例是测试项目的结果。考虑下面的测试用例中,订单3 x3的矩阵元素{{7 8 6},{2 5 9},{1 4 3}}和18个关键元素被认为是作为输入。图3显示了程序的输出屏幕截图使用C算法。
我得出结论,提出矩阵使用二叉搜索树的搜索算法,需要无序矩阵的顺序(mxn和搜索关键因素作为输入,将矩阵划分为两个部分。第一部分是下三角矩阵包括对角元素,第二部分是上三角矩阵对角元素除外。BST1由使用矩阵的第一部分和BST2由使用矩阵的第二部分。关键因素是BST1搜索,如果发现是BST2搜索,返回True,否则关键要素如果发现返回True,否则将返回False。利用算法的搜索时间关键要素是O (log xy) x BST1和y的节点的数目是BST2的节点的数量。