我一直在研究这个问题而且我在解决它时遇到了麻烦。不知道从哪里开始,有人可以帮助我吗?
int below(Plot p, line l);
int above(Plot p, line l);
line findLine(Plot p, line l)
{
}
答案 0 :(得分:1)
它是标准的二进制搜索问题。
将{2}相等的部分(基于点数)划分的行y = k
。
y
可以采用的值范围是多少?显然-1
到+1
。
是的,你可以。只需检查Plot p的每个点,然后检查有多少个点y
坐标大于k
。如你知道总点数那么你会知道线的两边的点是否相等。
假设您选择了一行y=k
。现在,在这一点上,你会看到上面有比它下面更多的点。现在你将向上移动。如果有更多的下行,那么你将向下移动。
double good = -1.0,bad= 1+EPSILON;
for(int iter=0;iter<=100;iter++)
{
mid = (good+bad)/2.0;
if(check(P,mid)) // if equally divides it then it's done
// mid is one answer;
else if( below(p,mid)<above(p,mid))
good=mid;
else
bad=mid;
}