import java.util.Arrays;
import java.util.Random;
public class IsOrder{
public static void main(String[] args){
double epsilon =0.4;
int[] array =newint[]{1,2,7,3,4,8,5,6};
int k =(int)(2/epsilon);
int[] samples = Arrays.copyOfRange(array,0, k);//這裏應該是保持順序的抽樣,我簡化了
Random random =newRandom();
int i = random.nextInt(samples.length);
System.out.println(i+":"+samples[i]);
System.out.println(Arrays.toString(samples));
System.out.println(binarySearch(samples,0, samples.length, i));}//關鍵是這個二分查找
private static boolean binarySearch(int[] samples,int start, int end, int i){if(end<=start)returntrue;
int mid = start+(end-start)/2;if(mid > i && samples[mid]< samples[i])returnfalse;//i後面的比sample[i]小if(mid < i && samples[mid]> samples[i])returnfalse;//i前面的比sample[i]大returnbinarySearch(samples, start, mid, i)&&binarySearch(samples,mid+1,end, i);}}
Scala
import scala.util.Random
object IsOrder2 {
def main(args: Array[String]): Unit ={
val epsilon =0.4
val array =Array(1,2,7,3,4,8,5,6)
val k =(2/epsilon).toInt
val samples = array.take(k)//這裏應該是保持順序的抽樣,我簡化了
val i = Random.nextInt(samples.length)println(i+":"+samples(i));println(samples.mkString("\t"))println(binarySearch(samples,0, samples.length, i));}
def binarySearch(samples:Array[Int], start:Int, end:Int, i:Int):Boolean={if(end<=start)returntrue;
val mid = start+(end-start)/2;if(mid > i &&samples(mid)<samples(i))returnfalse;//i後面的比sample[i]小if(mid < i &&samples(mid)>samples(i))returnfalse;//i前面的比sample[i]大returnbinarySearch(samples, start, mid, i)&&binarySearch(samples,mid+1,end, i)}}
Python
import random
def binarySearch(samples, start, end, i):if end <= start:return True
mid = start +(end - start)// 2if mid > i and samples[mid]< samples[i]:return False # i後面的比sample[i]小
if mid < i and samples[mid]> samples[i]:return False # i前面的比sample[i]大
returnbinarySearch(samples, start, mid, i) and binarySearch(samples, mid +1, end, i)
epsilon =0.4
array =[1,2,7,3,4,8,5,6]
k =int(2/epsilon)
samples = array[0:k] # 這裏應該是保持順序的抽樣,我簡化了
i = random.randint(0,len(samples))print(i, samples[i])print(samples)print(binarySearch(samples,0,len(samples), i))