[发明专利]通过计算实现分级定位的排序和查找的方法无效
申请号: | 01106995.3 | 申请日: | 2001-04-11 |
公开(公告)号: | CN1380606A | 公开(公告)日: | 2002-11-20 |
发明(设计)人: | 陈启星 | 申请(专利权)人: | 陈启星 |
主分类号: | G06F12/00 | 分类号: | G06F12/00 |
代理公司: | 暂无信息 | 代理人: | 暂无信息 |
地址: | 410005 湖南省*** | 国省代码: | 湖南;43 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 通过 计算 实现 分级 定位 排序 查找 方法 | ||
一种计算机对于一组无序的数据进行排序和一组有序的数据进行查找的方法。
目前时间复杂度较好的有快速排序、堆排序、希尔排序、归并排序等,除希尔排序外,其它几种都是借助“比较”进行排序的算法,根据斯特林公式,有[log2(n!)]=O(nlogn),上述结论从数量级上告诉我们,借助“比较”进行排序的算法在最坏情况下能达到的最好时间复杂度为O(nlogn)。基数排序不是借助“比较”进行排序的算法,时间复杂度为O(d*n),其中d为关键字从最高位到最低位的位数。这就是说,以上都是多趟排序。而且前三种是不稳定排序。
有没有一种理想化的排序方法呢?对于完全无序的n个数进行排序,理想化的方法应该是:每取出一个数,可以通过计算直接找到其所应该排在的位置,当n个数全部经过一趟计算后,全部找到其所应该排在的位置,这样就完成了排序。显然,理想化排序应该只要进行一趟排序即可完成排序,这大概不可能。
本发明的目的之一是要提供一种一趟或少数趟即可完成的稳定排序方法,使对于完全无序的数据进行排序,其时间复杂度降低至接近O(n),即接近理想化的排序。目的之二是提供一种通过计算查找,直接在n个数中确定一个很小的查找范围,以利于提高查找速度。目的之三是改造传统的归并排序法,屏弃归并排序法所采用的递归调用方法,只用一个单一的程序实现归并排序,从而提高排序速度。
在本发明的原理描述中,为统一起见,本说明以类pascal为基本语言,规定数组下标为从1开始的正整数,并增加规定可以使用动态数组或可调数组。本方法完全可以应用于其它语言,数组下标为不同规定的情况。为了叙述简便,将待排序关键字X(j).Key都简化为待排序数X(j)。
本发明是分级定位排序和分级定位查找,其基本原理是将排序和查找都各分为分级处理阶段和完成阶段。所谓分级处理是将待排序数的分布范围或待搜索数的分布范围划分为多个级别,用一个作为分级变量的数组来表示这些级别,使每个级别的大小对应着一个分级变量数组元素的下标值,当取出一个待处理数(即待排序数或待查找数)时,用一个变换关系得到该待处理数与上述数组元素的下标值的对应关系,使该待处理数直接进入它所对应的级别。分级定位排序的两个阶段为:
一、分级排序阶段。根据待排序数X(j)(j=1…n)所在的级别大小进行分级排序,待排序数的最大数为Max,最小数为Min,所以待排序数的分布范围为Max-Min,将分布范围预设为m个大小级别,每个级别对应一个数组元素B(i),B(i)称为分级变量,其中的下标i用于表示级别大小(i=1…m),称为级别变量,每个分级变量B(i)都能够容纳多个数,每当取出一个待排序数,对应其大小,可以直接通过计算换算为B(i)下标值i的大小,找到其所应该归属的级别B(i),从而无须查找就可以直接放入分级变量B(i)之中;当待排序的n个数全部经过一趟计算后,都直接找到其所应该归属的分级变量B(i),就完成了按级别大小的分级排序。在分级排序前是全程无序,在分级排序后仅仅是级内无序,级与级之间已有序化,排序难度降低。分级排序的每个分级变量B(i)都必须能够存放多个数据,所以B(i)包含着下级静态数组或动态数组或指向一个动态数据结构。比如,为了节省辅助存储空间,采用数组堆栈结构,数组B的每一个元素B(i)都是指向一个堆栈的指针,于是,当某个数据划分到分级变量B(i)时,就被压入到B(i)所指向的堆栈之中。同时,每个级别都有一个级内计数器k(i)统计该级别中数据个数,之所以要用数组变量k(i)的形式,为的是不至于使某一级别的计数器与其它级别的计数器搞混淆。
二、完全排序阶段,包括数据收集和级内排序两项操作。当遇到空级别(该级别中无关键字)k(i)=0时,跳转处理下个级别;当遇到恰好一个关键字的级别k(i)=1时,将关键字收集到数组D(t)之中,再跳转处理下个级别;当遇到多个关键字的级别k(i)>1时,先进行级内排序,再将关键字收集到数组D(t)之中,然后跳转处理下个级别。当数据被收集到数组D(t)之中时,假定级别B(i)中的数据在数组D(t)中基准位置(起始位置或结束位置)为t,为了以后的分级查找的需要,将t保存到数组E(i)中。
分级定位查找的两个阶段为:
一、确定查找范围阶段。给出一个待查找数据X后,传统方法是在待搜索数域全程查找,分级查找是在分级排序基础上,将X直接通过变换,成为E(i)下标i的大小,根据E(i)中存放的t,找到X在数组D(t)中的基准位置t,又根据k(i)确定其查找跨度。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于陈启星,未经陈启星许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/01106995.3/2.html,转载请声明来源钻瓜专利网。