eu estou a tentar resolver o seguinte problema.
Dado um t e um c, preciso de encontrar o maior número n possível tal que c * n * log(n) < t. Ou seja, preciso de encontrar o número n mais próximo de t que satisfaça essa conta.
O código que fiz é o seguinte, mas não satisfaz todas as condições que devia e não percebo porquê?
Problema tirado do TopCoder:
public class SortEstimate {
public double howMany(int c, int time)
{
//1*4*log(4) = 4*2 = 8
double l=0;
double h=Double.MAX_VALUE/100;
double m;
double dtime = time/c;
for(int i=0; i<1000; i++)
{
m = (l+h)/2;
if(m * (Math.log(m)/Math.log(2)) > dtime)
h=m;
else
l=m;
}
return (dtime-h < dtime-l) ? h : l;
}
public static void main(String[] args) {
SortEstimate se = new SortEstimate();
System.out.println(se.howMany(37, 12392342));
}
}