代码改变世界

平面上N个点求斜率最大的两个点

2011-09-24 20:01  chonghui1001  阅读(539)  评论(0编辑  收藏  举报

  平面上N个点求斜率最大两个点

1.根据X将N个点排序

2.最大的斜率为max(p[i], p[i+1])

可以证明如果有ABC三个点则AB与BC的斜率一个大于AC另一个则小于AC, k3 = (c - b)/(c - a)k2 + (b -a)/(c-a)k1;

通过反正法可以证明k3在k1和k2之间

p[i], p[i + k]斜率在(p[i ], p[i + 1]) 和(p[i + 1] , p[i + k])之间,然后递归推出最大的斜率为max(p[i], p[i + 1]);