欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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ì)?;舅枷胧?span style="color: #ff0000">對輸入數(shù)組進(jìn)行遞歸劃分,與快速排序不同的是,它只對劃分出的子數(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緩存操作技巧匯總

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

相關(guān)文章

  • java實(shí)現(xiàn)讀取帶合并單元格的Excel

    java實(shí)現(xiàn)讀取帶合并單元格的Excel

    這篇文章主要為大家詳細(xì)介紹了java如何實(shí)現(xiàn)讀取帶合并單元格的Excel,文中的示例代碼講解詳細(xì), 感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-12-12
  • Java實(shí)現(xiàn)將圖片上傳到webapp路徑下 路徑獲取方式

    Java實(shí)現(xiàn)將圖片上傳到webapp路徑下 路徑獲取方式

    這篇文章主要介紹了Java實(shí)現(xiàn)將圖片上傳到webapp路徑下 路徑獲取方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot多模塊打包部署Docker的項(xiàng)目實(shí)戰(zhàn)

    SpringBoot多模塊打包部署Docker的項(xiàng)目實(shí)戰(zhàn)

    本文通過介紹最常見的Maven管理的Spring Boot項(xiàng)目多模塊打包部署Docker來介紹一下項(xiàng)目部署過程中操作流程和幾個(gè)需要注意的點(diǎn),具有一定的參加價(jià)值,感興趣的可以了解一下
    2023-08-08
  • 如何使用java判斷是不是數(shù)字

    如何使用java判斷是不是數(shù)字

    這篇文章主要給大家介紹了關(guān)于如何使用java判斷是不是數(shù)字的相關(guān)資料,判斷一個(gè)字符串是否為數(shù)字是Java開發(fā)中很常見的業(yè)務(wù)需求,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 永久解決idea git log亂碼的問題

    永久解決idea git log亂碼的問題

    這篇文章主要介紹了永久解決idea git log亂碼的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java設(shè)計(jì)模式之監(jiān)聽器模式實(shí)例詳解

    Java設(shè)計(jì)模式之監(jiān)聽器模式實(shí)例詳解

    這篇文章主要介紹了Java設(shè)計(jì)模式之監(jiān)聽器模式,結(jié)合實(shí)例形式較為詳細(xì)的分析了java設(shè)計(jì)模式中監(jiān)聽器模式的概念、原理及相關(guān)實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下
    2018-02-02
  • Java顯示程序包不存在的三種解決方法總結(jié)

    Java顯示程序包不存在的三種解決方法總結(jié)

    在Java開發(fā)中,有時(shí)會(huì)遇到“程序包javax.servlet不存在”等錯(cuò)誤提示,這通常是因?yàn)槿鄙俦匾膸旎蛞蕾図?xiàng),這篇文章主要給大家介紹了關(guān)于Java顯示程序包不存在的三種解決方法,需要的朋友可以參考下
    2024-07-07
  • SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn)代碼

    SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn)代碼

    這篇文章主要介紹了SpringBoot 整合 Shiro 密碼登錄的實(shí)現(xiàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • java基礎(chǔ)的詳細(xì)了解第九天

    java基礎(chǔ)的詳細(xì)了解第九天

    這篇文章對Java編程語言的基礎(chǔ)知識(shí)作了一個(gè)較為全面的匯總,在這里給大家分享一下。需要的朋友可以參考,希望能給你帶來幫助
    2021-08-08
  • Spring中的策略模式簡單實(shí)現(xiàn)與使用分析

    Spring中的策略模式簡單實(shí)現(xiàn)與使用分析

    這篇文章主要介紹了Spring中的策略模式簡單實(shí)現(xiàn)與使用分析,去初始化時(shí)除了?initMultipartResolver(上傳文件)沒有獲取?Properties?defaultStrategies;默認(rèn)策略,其他的八大件都會(huì)使用到策略模式,需要的朋友可以參考下
    2024-01-01

最新評論