2012 / 4 / 4 - --- 랜 덤 선택 법
3130 단어 2012
그러나 비 극적인 일이 또 발생 했다. 돌아 오 는 길에 한 친구 의 타이어 가 터 졌 고 모두 빗속 에서 1 시간 가까이 타이 어 를 고 쳤 다.돌아 와 서 거울 을 보 니 온몸 이 진흙 투 성 이 였 다. 어젯밤 에 씻 은 차 는 이미 차 모양 을 볼 수 없 었 다. 그래서 또 20 분 동안 세 차 를 했다.
자, 토 크 가 끝나 고 알고리즘 을 쓰기 시 작 했 습 니 다.
무 작위 선택 법 (RANDOMIZED - SELECT): 배열 A 가 정렬 을 거 친 후의 i 번 째 수 (전문 명사 가 알 아야 할 순서 통 계량) 를 선택 하고 일반적인 방식 은 배열 A 를 정렬 한 다음 에 A [i] 의 값 을 꺼 내 면 됩 니 다.그러나 정렬 을 먼저 하고 이런 방식 을 선택 하면 시간 효율 이 좋 지 않다.그래서 여기 서 우 리 는 '랜 덤 선택 법' 을 사용한다.그 핵심 사상 은 빠 른 정렬 과 같 습 니 다. 먼저 키워드 key 를 찾 아 그 배열 의 위치 q 를 본 다음 에 q 와 i 의 크기 를 비교 합 니 다. i = q 라면 우 리 는 바로 키워드 key 를 꺼 낼 수 있 습 니 다.만약 i > q 라면, 우 리 는 [q + 1...] 이 범위 내 에서 키 워드 를 선택 하여 i = q 를 찾 을 때 까지 비교 합 니 다.만약 i < d, 우 리 는 [0... q - 1] 이 범위 내 에서 키 워드 를 계속 선택 하여 i = q 를 찾 을 때 까지 비교 합 니 다.
상세 한 사상 에 대해 서 는 절차 에 충분 한 주석 이 있어 이 해 를 돕는다.
/*
* ” “---- ,A[i]
* @version 1.0 2012/4/4
* @author akon
*/
package com.akon405.www;
public class RandomizedSelect {
//randomized_Select A A[i]
public int randomized_Select(int[] A,int left,int right,int i){
if(left==right){//
return A[left];
}
int q=division(A,left,right);//q ( A key , 。key key ,key key )
if(i==q){//i
return A[q];
}else if(i<q){//i , i [left,q-1]
return randomized_Select(A,left,q-1,i);
}else{//i , i [q+1,right]
return randomized_Select(A,q+1,right,i);
}
}
//division A , A key , key , key ( key A ),
public int division(int[] A,int left,int right){
int key=A[left];//
int temp;
// A key , 。key key ,key key
while(left!=right){
while(left<right&&key<A[right])
right--;// key , right
temp=A[right];
A[right]=A[left];
A[left]=temp;
while(left<right&&key>A[left])
left++;// key , left
temp=A[right];
A[right]=A[left];
A[left]=temp;
}
return left;// ,left=right
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] A={20,19,3,1,87,32,65};
RandomizedSelect rs=new RandomizedSelect();
int right=A.length-1;//
int left=0;//
int i=6;// i ” “-- ,A[i]
if(i<=right)
System.out.print(rs.randomized_Select(A, left, right, i));//
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
문제의 진정한 원인 찾기: 20121021 서버 장애 처리 경험(당초 성능을 고려하여tempdb 데이터베이스 파일을 비RAID5의 독립 하드디스크에 놓았습니다.) 파일이 존재했지만 갑자기 이 하드디스크에 다른 폴더가 많이 보이지 않는 것을 발견했습니다.RAID5가 아닌 이 독립...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.