zoukankan      html  css  js  c++  java
  • Randomized QuickSelect

    In this blog, we give a solution for Quick Select.

    Here, we have an improvement. The idea is to randomly pick a pivot element.

    Main difference is how we implement partition.

    Java Random

    public int nextInt(int bound)

    Returns a pseudorandom, uniformly distributed int value between 0 (inclusive) and the specified value (exclusive).
    int idx = new Random().nextInt(nums.length);
    int random = (nums[idx]);

    Codes

     1 public class Solution {
     2     private int partition(int[] nums, int start, int end) {
     3         int pivot = nums[end];
     4         int currentSmaller = start - 1;
     5         for (int i = start; i < end; i++) {
     6             if (nums[i] < pivot) {
     7                 currentSmaller++;
     8                 swap(nums, i, currentSmaller);
     9             }
    10         }
    11         currentSmaller++;
    12         swap(nums, end, currentSmaller);
    13         return currentSmaller;
    14     }
    15 
    16     public int randomPartition(int[] nums, int start, int end) {
    17         int length = end - start + 1;
    18         int idx = new Random().nextInt(length);
    19         int randomIndex = idx + start;
    20         swap(nums, last, randomIndex);
    21         partition(nums, start, end);
    22     }
    23 }

    The assumption in the analysis is, random number generator is equally likely to generate any number in the input range.

    The worst case time complexity of the above solution is still O(n2). In worst case, the randomized function may always pick a corner element. The expected time complexity of above randomized QuickSelect is Θ(n), see CLRS book or MIT video lecture for proof. 

  • 相关阅读:
    BootstrapTable表格数据左右移动功能遇到的问题(数据左右移动,列表拖拽排序,模糊查询列表数据定位)
    MVC校验
    线程
    验证码
    PublicLogic
    进程
    请求处理过程
    上传组件
    委托
    Global全局应用程序类
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4865572.html
Copyright © 2011-2022 走看看