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程序设计有所帮助。

(0)

相关推荐

  • 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背包问题求解实例代码

    背包问题主要是指一个给定容量的背包.若干具有一定价值和重量的物品,如何选择物品放入背包使物品的价值最大.其中又分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实现背包算法(0-1背包问题)

    0-1背包的问题 背包问题(Knapsack problem)是一种组合优化的NP完全问题.问题可以描述为:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高.问题的名称来源于如何选择最合适的物品放置于给定背包中. 这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放. 用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值.则其状态转移方程便是: f[i][v]=max{ f[i-1][v], f

  • 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

随机推荐