zoukankan      html  css  js  c++  java
  • 寻找最远点对

    本来想出道题,一开始想到求无向图中所有任意两个点最短距离中的最长距离,但是网上查了一下是NP难问题,果断弃坑。

    我的想法:

    每个点dijkstra+堆优化/斐波那契堆

    对入度、出度为1的点进行缩点

    然后我想到求所有点中任意两个点距离中的最长距离,就是最远点对,我想到的是O(nlogn)凸包 + O(n*n)凸包中的点两两配对【各种优化证明不对】,结果我在网上查了一下,有O(n)算法,果然我还是too young too simple……

    1).凸包围起来所有的点,最长距离对为凸包中的两个点连起来的线段

    证明:

    1. 对于任意两个点连成的线段a,左右延长,直到与凸包中的线段相交,才停止,得到线段b。len(b)>=len(a)

    2. 找到线段中其中一个点的左右端点,与线段中的另外一个点连接,得到三角形

    3. 线段b的长度小于等于三角形左右两条边的其中一条的长度

     首先以线段b在三角上的那个端点为圆心,以三角形左右两条边中最长的边为半径画圆

    b<=y<=z

    4. 与3一样的方法

     

     2) 旋转卡壳

    https://blog.csdn.net/huyuncong/article/details/6438284

    https://blog.csdn.net/Hackbuteer1/article/details/7484746

  • 相关阅读:
    epoll源码实现分析[整理]
    linux几种时间函数总结
    linux几种定时函数的使用
    linux下redis数据库的简单使用
    网络编程之非阻塞connect编写
    网络编程之select
    数码相框(LCD、I2C)
    centos tftp和samba的安装与配置
    libevent库简单使用
    c语言随机数
  • 原文地址:https://www.cnblogs.com/cmyg/p/8800579.html
Copyright © 2011-2022 走看看