技术标签: 数据分块算法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
文章浏览阅读57次。一.准备工作1.有效备份作好对ORACLE软件和数据库的物理备份.2.检查无效对象。3.确保SYSTEM的空闲空间在50M以上。4. SHARED_POOL_SIZE和JAVA_POOL_SIZE至少为150Mb。5.关闭数据库,关闭oracle进程。6.备份相关配置文件二.备份TSTZ下载...
文章浏览阅读4.4k次。Mybatis 查询报错java.sql.SQLSyntaxErrorException: ORA-00920: 无效的关系运算符当使用Mybatis-Plus的注解 @Select("select * from temp where creattime >= sysdate ") 查询数据时会报错ORA-00920: 无效的关系运算符原因是:在使用 >= 替代 >= 时,应在查询语句前添加 <script></script>例如_ora-00920: 无效的关系运算符
文章浏览阅读1.4k次。写完类继承HttpServlet后,按Ctrl+s保存文件后鼠标右键---source---Override/Implment Methods_myeclipse编写一个类继承httpservlet,重写doget和dopost方法
文章浏览阅读1.3w次,点赞4次,收藏49次。原文地址:http://www.51hei.com/mcu/4327.html一.接口LCD1602是很多单片机爱好者较早接触的字符型液晶显示器,它的主控芯片是HD44780或者其它兼容芯片。刚开始接触它的大多是单片机的初学者。由于对它的不了解,不能随心所欲地对它进行驱动。经过一段时间的学习,我对它的驱动有了一点点心得,今天把它记录在这里,以备以后查阅。与此相仿的是LCD12864液晶显示器,它是一_lcd1602rs,rw,e端接电阻作用
文章浏览阅读764次。3D旋转效果3D旋转效果_style 旋转
文章浏览阅读1.5k次。本文归纳整理vue2和vue3 对axios的封装代码,以及如何在web端操作使用cookies中存储的token来做效验之类的操作。vue2 使用的是 axios+vue-cookies组件实现vue3 使用的是 axios+js-cookies组件实现。_vue2 cookies
文章浏览阅读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={}
文章浏览阅读82次。作为一个3-5年的Android工程师,我们经常会遇到这些瓶颈:1.技术视野窄长期在小型软件公司,外包公司工作,技术视野被限制的太厉害2.薪资提升难初中级Android岗位薪资上升空间有限,基本上你想拿15k以上,不会点源码层的东西是根本拿不到的3.学习资源少入门之后想要提升很难,靠自己接触的简单业务项目,去反复操练那些cv技术。博客和书本上的技术大多比较抽象并且零散,可以借鉴和指导,但是没办法复制成自己的有了这份阿里众位P7大神整理的Android开发核心知识笔记,所有的瓶颈通通都能快速打破_程序员金九银十什么意思
文章浏览阅读111次。* 1)描述这个问题。 2)启发学生:怎么变化Dijkstra算法来求解这个问题。 3)给出这个代码。 4)讨论:复杂度变了么? * 需要讲清楚这个问题与加性权重下的Dijkstra算法的关系。 记得提醒学生,做这个题一定要将权重设为float,要改代码。 * 1)问题描述 2)基本想法:先求一条最短路,然后删除所有该路径经过的边(保证链路分离);然后再求一条最短路。 3)问题是:这样做可能不完备..._suurballe算法
文章浏览阅读713次。分形之谢尔宾斯基(Sierpinski)三角形谢尔宾斯基三角形(英语:Sierpinski triangle)是一种分形,由波兰数学家谢尔宾斯基在1915年提出,它是一种典型的自相似集。也有的资料将其称之为谢尔宾斯基坟垛.其生成过程为:1.取一个实心的三角形。(多数使用等边三角形)2.沿三边中点的连线,将它分成四个小三角形。3.去掉中间的那一个小三角形。4.对其余三个小三角形重复1。结果演示:代码..._谢尔宾斯基三角形维度
文章浏览阅读4.6k次。前段时间遇到过因为mysql表ibd文件被删除后的应急处理,直接删除表文件是严厉禁止的操作,这里测试下几种情况下的应急恢复过程。_mysql ibd文件直接删除
文章浏览阅读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_大小写切换时窃取焦点