数据分块算法java_分块查询算法(JAVA)-程序员宅基地

技术标签: 数据分块算法java  

描述:

分块查找要求索引表是有序的,对块内节点没有排序要求,因此适合于节点动态变化的情况。

分块查找要求把一个大的线性表分解成若干块,每块中的节点可以任意存放,但块与块之间必须排序

步骤:

step1 先选取各块中的最大关键字构成一个索引表;

step2 查找分两个部分:先对索引表进行二分查找或顺序查找,以确定待查记录在哪一块中;

step3 然后,在已确定的块中用顺序法进行查找。

索引表的长度最佳为数据总长度开根号;package cn.ljonah.search;

import java.util.ArrayList;

/**

* @Descript:分块查找

*

* @author LJonah 2018年3月12日

*/

public class BlockSearch {

private int[] index;//建立索引

private ArrayList[] list;

/**

* @Descript:初始化索引

*

* @author LJonah 2018年3月12日

* @param index

*/

public BlockSearch(int[] index){

if(null != index && index.length!=0){

this.index = index;

this.list = new ArrayList[index.length];

for (int i = 0;i < list.length;i++) {

list[i] = new ArrayList();//初始化容器

}

}else{

throw new Error("index cannot be null or empty");

}

}

/**

* @Descript:插入索引

*

* @author LJonah 2018年3月12日

* @param value

*/

public void insert(int value){

int i = binarySearch(value);

list[i].add(value);

}

/**

* @Descript:二分法查找

*

* @author LJonah 2018年3月12日

* @param value

* @return

*/

private int binarySearch(int value){

int start = 0,end =index.length;int mid = -1;

while(start<=end){

mid=(start+end)/2;

if(index[mid]>value){

end = mid -1;

}else{

//如果相等,也插入后面

start = mid+1;

}

}

return start;

}

/**

* @Descript:查找元素

*

* @author LJonah 2018年3月12日

* @param data

* @return

*/

public boolean search(int data)

{

int i=binarySearch(data);

for(int j=0;j

{

if(data==(int)list[i].get(j))

{

System.out.println(String.format("查找元素为第: %d块 第%d个 元素", i+1,j+1));

return true;

}

}

return false;

}

/**

* @Descript:打印每块的元素

*

* @author LJonah 2018年3月12日

*/

public void printAll(){

for (int i = 0; i < list.length; i++) {

ArrayList l = list[i];

System.out.println("ArrayList["+i+"]:");

for (int j = 0; j < l.size(); j++) {

System.out.println(l.get(j)+" ");

}

}

}

/**

* @Descript:测试

*

* @author LJonah 2018年3月12日

* @param args

*/

public static void main(String[] args) {

int []index={10,20,30};

BlockSearch blocksearch=new BlockSearch(index);

blocksearch.insert(1);

blocksearch.insert(11);

blocksearch.insert(21);

blocksearch.insert(2);

blocksearch.insert(12);

blocksearch.insert(22);

blocksearch.insert(5);

blocksearch.insert(15);

blocksearch.insert(25);

blocksearch.printAll();

System.out.println("查找值15   结果"+blocksearch.search(15));

System.out.println("查找值29   结果"+blocksearch.search(29));

}

}

测试结果:ArrayList[0]:

1

2

5

ArrayList[1]:

11

12

15

ArrayList[2]:

21

22

25

查找元素为第: 2块 第3个 元素

查找值15 结果true

查找值29 结果false

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_35724881/article/details/114312369

智能推荐

Linux ORACLE RAC 10201升级10203-程序员宅基地

文章浏览阅读57次。一.准备工作1.有效备份作好对ORACLE软件和数据库的物理备份.2.检查无效对象。3.确保SYSTEM的空闲空间在50M以上。4. SHARED_POOL_SIZE和JAVA_POOL_SIZE至少为150Mb。5.关闭数据库,关闭oracle进程。6.备份相关配置文件二.备份TSTZ下载...

mybatis查询报错ORA-00920: 无效的关系运算符-程序员宅基地

文章浏览阅读4.4k次。Mybatis 查询报错java.sql.SQLSyntaxErrorException: ORA-00920: 无效的关系运算符当使用Mybatis-Plus的注解 @Select("select * from temp where creattime &gt;= sysdate ") 查询数据时会报错ORA-00920: 无效的关系运算符原因是:在使用 &gt;= 替代 >= 时,应在查询语句前添加 <script></script>例如_ora-00920: 无效的关系运算符

Myeclipse中快速插入HttpServlet子类中doGet和doPost方法_myeclipse编写一个类继承httpservlet,重写doget和dopost方法-程序员宅基地

文章浏览阅读1.4k次。写完类继承HttpServlet后,按Ctrl+s保存文件后鼠标右键---source---Override/Implment Methods_myeclipse编写一个类继承httpservlet,重写doget和dopost方法

LCD1602详解_lcd1602rs,rw,e端接电阻作用-程序员宅基地

文章浏览阅读1.3w次,点赞4次,收藏49次。原文地址:http://www.51hei.com/mcu/4327.html一.接口LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。刚开始接触它的大多是单片机的初学者。由于对它的不了解,不能随心所欲地对它进行驱动。经过一段时间的学习,我对它的驱动有了一点点心得,今天把它记录在这里,以备以后查阅。与此相仿的是LCD12864液晶显示器,它是一_lcd1602rs,rw,e端接电阻作用

css3之transform-style 3D旋转效果_style 旋转-程序员宅基地

文章浏览阅读764次。3D旋转效果3D旋转效果_style 旋转

Vue2 和 Vue3 封装 axios和cookies,完成请求效验_vue2 cookies-程序员宅基地

文章浏览阅读1.5k次。本文归纳整理vue2和vue3 对axios的封装代码,以及如何在web端操作使用cookies中存储的token来做效验之类的操作。vue2 使用的是 axios+vue-cookies组件实现vue3 使用的是 axios+js-cookies组件实现。_vue2 cookies

随便推点

python的BeautifulSoup库find与find_all_def bs_scraper(html): soup=beautifulsoup(html) res-程序员宅基地

文章浏览阅读651次。BeautifulSoup的find和find_all是搜索html的tag,返回是整个tagfind可以连用,相当于在父tag里面find 子tag,在子tag里面find孙tagdef bs_scraper(html): soup = BeautifulSoup(html, 'html.parser') results = {} for target in t..._def bs_scraper(html): soup=beautifulsoup(html) results={}

程序员必学之一!金九银十怎么从中小企业挤进一线大厂?2年以上经验必看_程序员金九银十什么意思-程序员宅基地

文章浏览阅读82次。作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈:1.技术视野窄长期在小型软件公司,外包公司工作,技术视野被限制的太厉害2.薪资提升难初中级Android岗位薪资上升空间有限,基本上你想拿15k以上,不会点源码层的东西是根本拿不到的3.学习资源少入门之后想要提升很难,靠自己接触的简单业务项目,去反复操练那些cv技术。博客和书本上的技术大多比较抽象并且零散,可以借鉴和指导,但是没办法复制成自己的有了这份阿里众位P7大神整理的Android开发核心知识笔记,所有的瓶颈通通都能快速打破_程序员金九银十什么意思

最短路算法的证明_最短路算法(图论)精要.ppt-程序员宅基地

文章浏览阅读111次。* 1)描述这个问题。 2)启发学生:怎么变化Dijkstra算法来求解这个问题。 3)给出这个代码。 4)讨论:复杂度变了么? * 需要讲清楚这个问题与加性权重下的Dijkstra算法的关系。 记得提醒学生,做这个题一定要将权重设为float,要改代码。 * 1)问题描述 2)基本想法:先求一条最短路,然后删除所有该路径经过的边(保证链路分离);然后再求一条最短路。 3)问题是:这样做可能不完备..._suurballe算法

sierpinski三角形的维数_谢尔宾斯基(Sierpinski)三角形-程序员宅基地

文章浏览阅读713次。分形之谢尔宾斯基(Sierpinski)三角形谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集。也有的资料将其称之为谢尔宾斯基坟垛.其生成过程为:1.取一个实心的三角形。(多数使用等边三角形)2.沿三边中点的连线,将它分成四个小三角形。3.去掉中间的那一个小三角形。4.对其余三个小三角形重复1。结果演示:代码..._谢尔宾斯基三角形维度

数据库系列之MySQL表ibd文件删除恢复_mysql ibd文件直接删除-程序员宅基地

文章浏览阅读4.6k次。前段时间遇到过因为mysql表ibd文件被删除后的应急处理,直接删除表文件是严厉禁止的操作,这里测试下几种情况下的应急恢复过程。_mysql ibd文件直接删除

Dell Caps Lock 切换大小写被窃取焦点问题解决办法_大小写切换时窃取焦点-程序员宅基地

文章浏览阅读1.8k次。刚买的Dell本本碰到此问题, 特别郁闷, 使用起来也很不方便. 遍历google搜索最终挖出了解决方法,亲测可用 直接贴操作: 很简单的英文描述,相信大家能看懂,我就不翻译了. Click on Start and then Run. In the text box in the Run window, type regedit and click OK. This will open the Registry Editor program. Locate the HKEY_CURRENT_U_大小写切换时窃取焦点