
Java使用分治算法实现排序数索引功能示例【二分搜索】

本文实例讲述了Java使用分治算法实现排序数索引功能。分享给大家供大家参考,具体如下:
/** * Find the first q and return the index * First method is brutal force * Second may * be Divid and Conquer * * @author open201 * */ public class Ono { /** * f(n) = s.length = n; * * @param s * @param q * @return */ public static int BrutalForceSearch(int[] s, int q) { for (int i = 0; i < s.length; i++) { if (q == s[i]) return i; } return -1; } /** * f(n) = log(n) * * @param s * @param q * @return */ public static int DCSearch(int[] s, int q, int startIndex, int endIndex) { if (startIndex > endIndex) return -1; else { int mid = (startIndex + endIndex) / 2; if (s[mid] == q) return mid; else { if (s[mid] > q) return DCSearch(s, q, startIndex,mid-1); else return DCSearch(s, q, mid+ 1,endIndex); } } } public static void main(String[] args) { int [] s = new int[10000000]; for(int i = 0;i<10000000;i++){ s[i] = i; } int q = 10000000-1; long startTime = System.currentTimeMillis(); System.out.println(BrutalForceSearch(s, q)); long endTime = System.currentTimeMillis(); System.out.println(endTime-startTime); startTime = System.currentTimeMillis(); System.out.println(DCSearch(s, q, 0, s.length - 1)); endTime = System.currentTimeMillis(); System.out.println(endTime-startTime); } }
更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
相关推荐
-
Java实现合并两个有序序列算法示例
本文实例讲述了Java实现合并两个有序序列算法.分享给大家供大家参考,具体如下: 问题描述 输入:序列A<a0,a1,a2,...aq,aq+1,aq+2,...,ar>,其中a0<a1<...<aq,aq+1<aq+2<...<ar 输出:序列B<b0,b1,...,br>,其中b0<b1<...<br 算法思想 创建一个长度为r的数组R,将A中的序列看作是两个有序序列 B=A<a0,a1,a2,...,aq> C
-
浅谈java实现背包算法(0-1背包问题)
0-1背包的问题 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高.问题的名称来源于如何选择最合适的物品放置于给定背包中. 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放. 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是: f[i][v]=max{ f[i-1][v], f
-
Java背包问题求解实例代码
背包问题主要是指一个给定容量的背包.若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大.其中又分01背包和无限背包,这里主要讨论01背包,即每个物品最多放一个.而无限背包可以转化为01背包. 先说一下算法的主要思想,利用动态规划来解决.每次遍历到的第i个物品,根据w[i]和v[i]来确定是否需要将该物品放入背包中.即对于给定的n个物品,设v[i].w[i]分别为第i个物品的价值和重量,C为背包的容量.再令v[i][j]表示在前i个物品中能够装入容量为j的背包中的最大价值.则我们有
-
详解Java数据结构和算法(有序数组和二分查找)
一.概述 有序数组中常常用到二分查找,能提高查找的速度.今天,我们用顺序查找和二分查找实现数组的增删改查. 二.有序数组的优缺点 优点:查找速度比无序数组快多了 缺点:插入时要按排序方式把后面的数据进行移动 三.有序数组和无序数组共同优缺点 删除数据时必须把后面的数据向前移动来填补删除项的漏洞 四.代码实现 public class OrderArray { private int nElemes; //记录数组长度 private long[] a; /** * 构造函数里面初始化数组 赋值默
-
Java使用分治算法实现排序数索引功能示例【二分搜索】
本文实例讲述了Java使用分治算法实现排序数索引功能.分享给大家供大家参考,具体如下: /** * Find the first q and return the index * First method is brutal force * Second may * be Divid and Conquer * * @author open201 * */ public class Ono { /** * f(n) = s.length = n; * * @param s * @param q
-
Java基于分治算法实现的线性时间选择操作示例
本文实例讲述了Java基于分治算法实现的线性时间选择操作.分享给大家供大家参考,具体如下: 线性时间选择问题:给定线性序集中n个元素和一个整数k,1≤k≤n,要求找出这n个元素中第k小的元素,(这里给定的线性集是无序的). 随机划分线性选择 线性时间选择随机划分法可以模仿随机化快速排序算法设计.基本思想是对输入数组进行递归划分,与快速排序不同的是,它只对划分出的子数组之一进行递归处理. 程序解释:利用随机函数产生划分基准,将数组a[p:r]划分成两个子数组a[p:i]和a[i+1:r],使a[p
-
Java基于分治算法实现的棋盘覆盖问题示例
本文实例讲述了Java基于分治算法实现的棋盘覆盖问题.分享给大家供大家参考,具体如下: 在一个2^k * 2^k个方格组成的棋盘中,有一个方格与其它的不同,若使用以下四种L型骨牌覆盖除这个特殊方格的其它方格,如何覆盖.四个L型骨牌如下图: 棋盘中的特殊方格如图: 实现的基本原理是将2^k * 2^k的棋盘分成四块2^(k - 1) * 2^(k - 1)的子棋盘,特殊方格一定在其中的一个子棋盘中,如果特殊方格在某一个子棋盘中,继续递归处理这个子棋盘,直到这个子棋盘中只有一个方格为止如果特殊方格不
-
详解Java实现分治算法
目录 一.前言 二.分治算法介绍 三.分治算法经典问题 3.1.二分搜索 3.2.快速排序 3.3.归并排序(逆序数) 3.4.最大子序列和 3.5.最近点对 四.结语 一.前言 在学习分治算法之前,问你一个问题,相信大家小时候都有存钱罐的经历,父母亲人如果给钱都会往自己的宝藏中存钱,我们每隔一段时间都会清点清点钱.但是一堆钱让你处理起来你可能觉得很复杂,因为数据相对于大脑有点庞大了,并且很容易算错,你可能会将它先分成几个小份算,然后再叠加起来计算总和就获得这堆钱的总数了 当然如果你觉得各个部分
-
Java编程实现游戏中的简单碰撞检测功能示例
本文实例讲述了Java编程中的简单碰撞检测功能.分享给大家供大家参考,具体如下: 今天在家正在写一个坦克大战的小游戏来玩,遇到了一个简单的圆和圆的碰撞检测的小问题, 碰撞检测的过程处理主要有以下三步: 1.碰撞检测(Collision Detection):返回两个或多个物体是否发生碰撞的布尔判断. 2.碰撞确定(Collision Determination):找到物体之间实际相交位置. 3.碰撞响应(Collision Response):针对两个物体之间的碰撞决定采取何种操作. 下面是关于
-
java实现从方法返回多个值功能示例
本文实例讲述了java实现从方法返回多个值功能.分享给大家供大家参考,具体如下: 这里介绍三个方法,使java方法返回多个值. 方法1:使用集合类 方法2:使用封装对象 方法3:使用引用传递 示例代码如下: import java.util.HashMap; import java.util.Map; public class Test { /** * 方法1:使用集合类 (Map以外的集合类也可以随意使用) * 目标:返回一个数组的最大值和最小值 */ public Map<String, I
-
java实现简单的英文文本单词翻译器功能示例
本文实例讲述了java实现简单的英文文本单词翻译器功能.分享给大家供大家参考,具体如下: 直接上代码: package fanyi; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader;
-
Java实现对一行英文进行单词提取功能示例
本文实例讲述了Java实现对一行英文进行单词提取功能.分享给大家供大家参考,具体如下: package fanyi; import java.util.Scanner; import java.util.StringTokenizer; public class text { public static void handle(String eString) { StringTokenizer st = new StringTokenizer(eString,",!' '.;"); w
-
Java实现的时间戳与date对象相互转换功能示例
本文实例讲述了Java实现的时间戳与date对象相互转换功能.分享给大家供大家参考,具体如下: 一.日期转换为时间戳 public long getTimestamp() throws ParseException{ Date date1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss") .parse("2009/12/11 00:00:00"); Date date2 = new SimpleDateFormat(&quo
-
Java Swing实现简单的体重指数(BMI)计算器功能示例
本文实例讲述了Java Swing实现简单的体重指数(BMI)计算器功能.分享给大家供大家参考,具体如下: BMI,Body Mass Index,身体质量指数,是用体重公斤数 除以 身高米数平方得出的,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准. 而本文通过运用Java Swing实现了一个简单的BMI计算器.虽然现在网页上也有相应的网页应用,但是能够做出这个计算器来,还是有点成就感的,希望自己以后做出更多比这个好的应用. 最终运行效果: 功能:可以选择三个标准:中国.亚洲.WH
随机推荐
- hadoop动态增加和删除节点方法介绍
- DOM XPATH获取img src值的query
- Angular 2父子组件数据传递之@ViewChild获取子组件详解
- AspNetPager分页控件源代码(Version 4.2)第1/2页
- Mysql 取字段值逗号第一个数据的查询语句
- 用MySQL创建数据库和数据库表代码
- javascript Error 对象 错误处理
- 原生js实现仿window10系统日历效果的实例
- s:set 和 s:date 使用, 在jsp判断日期
- Android应用开发中单元测试分析
- jquery对表单操作2
- Firefox getBoxObjectFor getBoundingClientRect联系
- BootStrap 动态表单效果
- C语言 表、栈和队列详解及实例代码
- 7种排序算法的实现示例
- 养成良好的C++编程习惯之内存管理的应用详解
- Spring Boot 与 kotlin 使用Thymeleaf模板引擎渲染web视图的方法
- Android自定义圆形View实现小球跟随手指移动效果
- JavaScript中的 new 命令
- Elasticsearch QueryBuilder简单查询实现解析
其他
- android studio集成ijkplayer
- python怎么在窗口显示图片
- rscript怎么算横排的平均值
- /etc/rc.local不执行
- android studio 文件夹绿点
- stringbuffer 读取二进制文件
- jquery 列表行动态置顶
- go json 内联
- pg substring输入变量
- r语言 取消科学计数法
- table为什么radio不显示
- 内网安装vscode 服务端
- python while嵌套while语句
- onnx 导出时保留名字
- spring boot 自定义starter 配置隔离
- 微信小程序输入框带筛选
- jq删除class为某一个值得子元素
- vue两个接口按顺序返回
- android EditText显示剩余字数
- vuecli2改造vue cli3