Question: Java For Each Of The Algorithms Unique1 And Unique2, Whi
Question:
Java
For each of the algorithms unique1 and unique2, which solve the element uniqueness problem, perform an experimental analysis to determine the largest value of n such that the given algorithm runs in one minute or less. Hint: Do a type of “binary search” to determine the maximum effective value of n for each algorithm.
public static boolean unique1(int[] data) {
    int n = data.length;
    for (int j=0; j < n-1; j++)
      for (int k=j+1; k < n; k++)
        if (data[j] == data[k])
          return false;                    // found duplicate pair
    return true;                           // if we reach this, elements are unique
  }
  /** Returns true if there are no duplicate elements in the array. */
  public static boolean unique2(int[] data) {
    int n = data.length;
    int[] temp = Arrays.copyOf(data, n);   // make copy of data
    Arrays.sort(temp);                     // and sort the copy
    for (int j=0; j < n-1; j++)
      if (temp[j] == temp[j+1])            // check neighboring entries
        return false;                      // found duplicate pair
    return true;                           // if we reach this, elements are unique
  }
Answer:
Java code:
import java.util.concurrent.TimeUnit;
import java.lang.Math;
import java.util.Arrays;
public class timeSearch
{
public static boolean unique1(int [] data,int n)
{
    //int n=data.length;
    for(int j=0;j<n-1;j++)
    {
        for(int k=j+1;k<n;k++)
        {
            if(data[j]==data[k])
                return(false);
        }
    }
    return(true);
}
public static boolean unique2(int [] data,int n)
{
    int []temp=Arrays.copyOf(data,n);
    Arrays.sort(temp);
    for(int j=0;j<n-1;j++)
    {
        if(temp[j]==temp[j+1])
            return(false);
    }
    return(true);
}
public static void main(String args[])
{
    int sz=(int)Math.pow(2,20);
    int data[]= new int[sz];
    int i;
    for(i=0;i<sz;i++)    //fill array
    {
        data[i]=sz-i+1;
    }
long startTime,endTime,totalTime;
    i=1;
    totalTime=0;
    while(totalTime/Math.pow(10,6)<1)
    {
        startTime = System.nanoTime();
        unique1(data,i);
        endTime   = System.nanoTime();
        totalTime = endTime - startTime;
        i++;
    }
System.out.println("Value of n for which unique1 takes 10^(-6)second(1 microsecond):"+i);
    totalTime=0;
    i=1;
    while(totalTime/Math.pow(10,6)<1)
    {
        startTime = System.nanoTime();
        unique2(data,i);
        endTime   = System.nanoTime();
        totalTime = endTime - startTime;
    i++;
    }
    System.out.println("Value of n for which unique1 takes 10^(-6)second(1 microsecond):"+i);
}
}
output:
