public class Main {
public static void main(String[] args) {
Main example = new Main();
//雇佣问题
example.RANDOMIZED_HIRE_ASSISTANT_RANDOM_IN_PLACE(new int[]{1,5,2134,5231,3,12,6543,23,22},100,3000);
//在线雇佣
int A[]=new int[]{1,5,2134,5231,3,12,6543,23,22};
example.ON_LINE_MAXIMUM(A, (int) (A.length / Math.E));
//5-2:查找一个无序数组
example.RANDOM_SEARCH(2,A);
}
public void RANDOMIZED_HIRE_ASSISTANT_RANDOM_IN_PLACE(int[]A,int x,int y){
//x代表面试费用,y代表雇佣费用
//随机原址排列
for (int i=1;i<A.length;i++){
int m = (int) ((Math.random() * (A.length-i)+i));
int temp=A[m];
A[m]=A[i];
A[i]=temp;
}
int best=A[0];
int cost=x;
for (int i=1;i<A.length;i++){
if (A[i] > best) {
best=A[i];
cost=cost+x+y;
}
cost=cost+x;
}
System.out.println(cost);
}
public void ON_LINE_MAXIMUM( int A[],int k) {
int best = A[0];
for (int i = 1; i < k; i++) {
if (A[i]>best){
best = A[i];
}
}
for (int i = k; k < A.length; i++) {
if (A[i] > best) {
System.out.println(A[i]);
return;
}
}
System.out.println(A[A.length]);
return;
}
public void RANDOM_SEARCH(int x,int []A){
int USED[]=new int[A.length];
while (CHECK(USED)){
int random = (int) (Math.random() * A.length);
if (A[random]==x) {
System.out.println("FIND IT!");
return;
}
USED[random]=1;
}
System.out.println("NO FIND!");
}
public Boolean CHECK(int[] USED) {
for (int i = 0; i < USED.length; i++) {
if (USED[i]==0) return true;
}
return false;
}
}
算法导论第五章:概率分析和随机算法-全部代码实现
最新推荐文章于 2023-05-12 18:19:10 发布