最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java基于分治算法實(shí)現(xiàn)的線性時(shí)間選擇操作示例

 更新時(shí)間:2017年11月24日 08:56:03   作者:萌神哆啦A夢  
這篇文章主要介紹了Java基于分治算法實(shí)現(xiàn)的線性時(shí)間選擇操作,涉及java排序、比較、計(jì)算等相關(guān)操作技巧,需要的朋友可以參考下

本文實(shí)例講述了Java基于分治算法實(shí)現(xiàn)的線性時(shí)間選擇操作。分享給大家供大家參考,具體如下:

線性時(shí)間選擇問題:給定線性序集中n個(gè)元素和一個(gè)整數(shù)k,1≤k≤n,要求找出這n個(gè)元素中第k小的元素,(這里給定的線性集是無序的)。

隨機(jī)劃分線性選擇

線性時(shí)間選擇隨機(jī)劃分法可以模仿隨機(jī)化快速排序算法設(shè)計(jì)。基本思想是對(duì)輸入數(shù)組進(jìn)行遞歸劃分,與快速排序不同的是,它只對(duì)劃分出的子數(shù)組之一進(jìn)行遞歸處理。

程序解釋:利用隨機(jī)函數(shù)產(chǎn)生劃分基準(zhǔn),將數(shù)組a[p:r]劃分成兩個(gè)子數(shù)組a[p:i]和a[i+1:r],使a[p:i]中的每個(gè)元素都不大于a[i+1:r]中的每個(gè)元素。接著"j=i-p+1"計(jì)算a[p:i]中元素個(gè)數(shù)j.如果k<=j,則a[p:r]中第k小元素在子數(shù)組a[p:i]中,如果k>j,則第k小元素在子數(shù)組a[i+1:r]中。注意:由于已知道子數(shù)組a[p:i]中的元素均小于要找的第k小元素,因此,要找的a[p:r]中第k小元素是a[i+1:r]中第k-j小元素。

在最壞的情況下,例如:總是找到最小元素時(shí),總是在最大元素處劃分,這是時(shí)間復(fù)雜度為O(n^2)。但平均時(shí)間復(fù)雜度與n呈線性關(guān)系,為O(n)

package math;
import java.util.Scanner;
import java.util.Random;
public class RandomSelect {
  public static void swap(int x, int y) {
    int temp = x;
    x = y;
    y = temp;
  }
  public int Random (int x, int y) {
    Random random = new Random();
    int num = random.nextInt(y)%(y - x + 1) + x;
    return num;
  }
  public int partition(int[] list, int low, int high) {
    int tmp = list[low];  //數(shù)組的第一個(gè)作為中軸
    while (low < high) {
      while (low < high && list[high] > tmp) {
        high--;
      }
      list[low] = list[high];  //比中軸小的記錄移到低端
      while (low < high && list[low] < tmp) {
        low++;
      }
      list[high] = list[low];  //比中軸大的記錄移到高端
    }
    list[low] = tmp;       //中軸記錄到尾
    return low;          //返回中軸的位置
  }
  public int RandomizedPartition (int[] arrays, int left, int right) {
    int i = Random(left, right);
    swap(arrays[i], arrays[left]);
    return partition(arrays, left, right);
  }
  public int RandomizedSelect(int[] arrays, int left, int right, int k) {
    if(left == right ) {
      return arrays[left];
    }
    int i = RandomizedPartition(arrays, left, right);
    int j = i - left + 1;
    if(k <= j) {
      return RandomizedSelect(arrays,left, i,k) ;
    }
    else {
      return RandomizedSelect(arrays,i+1,right,k-j);
    }
  }
  public static void main(String args[]) {
    System.out.println("腳本之家測試結(jié)果:");
    int[] a = {7,5,3,4,8,6,9,1,2};
    for (int i = 0; i < 9; i ++) {
      System.out.print(a[i]+ " ");
    }
    System.out.println();
    RandomSelect r = new RandomSelect();
    System.out.println("你要查詢的元素是數(shù)組中第幾小的?");
    @SuppressWarnings("resource")
 Scanner sc = new Scanner(System.in);
    int m = sc.nextInt();
    int n = r.RandomizedSelect(a,0,8,m);
    System.out.println("這個(gè)數(shù)組中第" + m + "小的元素是:"+ n);
  }
}

運(yùn)行結(jié)果:

更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總

希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Java語言實(shí)現(xiàn)掃雷游戲(1)

    Java語言實(shí)現(xiàn)掃雷游戲(1)

    這篇文章主要為大家詳細(xì)介紹了Java語言實(shí)現(xiàn)的掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • mybatis水平分表實(shí)現(xiàn)動(dòng)態(tài)表名的項(xiàng)目實(shí)例

    mybatis水平分表實(shí)現(xiàn)動(dòng)態(tài)表名的項(xiàng)目實(shí)例

    本文主要介紹了mybatis水平分表實(shí)現(xiàn)動(dòng)態(tài)表名的項(xiàng)目實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • SpringBoot使用不同環(huán)境動(dòng)態(tài)加載不同配置文件

    SpringBoot使用不同環(huán)境動(dòng)態(tài)加載不同配置文件

    通過在resource目錄下創(chuàng)建不同環(huán)境的配置文件,并在Spring?Boot啟動(dòng)類中使用環(huán)境變量來加載相應(yīng)的配置文件,從而實(shí)現(xiàn)不同環(huán)境下的配置自動(dòng)加載
    2024-11-11
  • 關(guān)于idea引入spring boot <parent></parent>父依賴標(biāo)紅問題

    關(guān)于idea引入spring boot <parent></parent>父依賴標(biāo)紅問題

    這篇文章主要介紹了idea引入spring boot <parent></parent>父依賴標(biāo)紅問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • springboot動(dòng)態(tài)調(diào)用實(shí)現(xiàn)類方式

    springboot動(dòng)態(tài)調(diào)用實(shí)現(xiàn)類方式

    這篇文章主要介紹了springboot動(dòng)態(tài)調(diào)用實(shí)現(xiàn)類方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot 創(chuàng)建容器的實(shí)現(xiàn)

    SpringBoot 創(chuàng)建容器的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot 創(chuàng)建容器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • JDK8 new ReentrantLock((true)加鎖流程

    JDK8 new ReentrantLock((true)加鎖流程

    這篇文章主要介紹了java面試中常遇到的問題JDK8 new ReentrantLock((true)加鎖流程示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • mybatis?resultMap之collection聚集兩種實(shí)現(xiàn)方式

    mybatis?resultMap之collection聚集兩種實(shí)現(xiàn)方式

    本文主要介紹了mybatis?resultMap之collection聚集兩種實(shí)現(xiàn)方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • SpringMVC @RequestMapping注解應(yīng)用方法示例講解

    SpringMVC @RequestMapping注解應(yīng)用方法示例講解

    通過@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 詳解java定時(shí)任務(wù)

    詳解java定時(shí)任務(wù)

    這篇文章主要為大家詳細(xì)介紹了java定時(shí)任務(wù),使用JDK中的Timer定時(shí)任務(wù)來實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
    2016-03-03

最新評(píng)論

溆浦县| 缙云县| 隆尧县| 青浦区| 江口县| 微博| 霍州市| 恩施市| 韶关市| 新宁县| 怀集县| 靖安县| 南通市| 阜宁县| 襄汾县| 承德县| 搜索| 昌宁县| 偃师市| 柳林县| 堆龙德庆县| 通道| 峨山| 玉田县| 应城市| 安庆市| 长乐市| 平罗县| 左贡县| 共和县| 和平区| 抚顺县| 东丰县| 大冶市| 保靖县| 喀喇| 新营市| 苗栗县| 施甸县| 广西| 民乐县|