码迷,mamicode.com
首页 > 其他好文 > 详细

Randomized QuickSelect

时间:2015-10-10 01:37:14      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

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. 

 

Randomized QuickSelect

标签:

原文地址:http://www.cnblogs.com/ireneyanglan/p/4865572.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!