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

  • 相关阅读:
    大话设计模式C++ 适配器模式
    36. Valid Sudoku
    c++ 常用的数据结构
    《大话设计模式》c++实现 状态模式
    c++ 各种类型转换
    38. Count and Say
    《大话设计模式》c++实现 抽象工厂模式
    66. Plus One
    49. Group Anagrams
    《大话设计模式》c++实现 建造者模式
  • 原文地址:https://www.cnblogs.com/cmyg/p/8800579.html
Copyright © 2011-2022 走看看