1. 已知n凸多边形的各顶点坐标 如何将他们顺时针排列
(1)找一个内点
(2)计算这个内点到各顶点的角度0-360度
(3)按角度排序
找一个内点:
任选3点x1,y1,x2,y2,x3,y3
计算:
x0=(x1 + x2 + x3)/3
y0=(y1 + y2 + y3)/3.
计算这个内点到各顶点的角度:
dy=yi-y0
dx=xi-x0
ds=sqrt(dx*dx+dy*dy)
sin(Ai) = dy/ds
判断象限。
排序不用说了吧。
2. 任意多边形的最小外接圆(注意最小两字)
这是离散几何问题. 具体是这样做的:
多边形可不妨设为凸的, 因为显然有凹多边形跟其凸包多边形的最小外接圆相同. 算法上可以先求出给定多边形的凸包.
设P是一个给定的凸n边形. 考察其任意三个顶点决定的圆, 至多有{n choose 3}个不同的圆.
设这些圆中能盖住P的为圆C_1, 圆C_2, ..., 圆C_m.
找出那个最小的圆C_i即可, 这里谁大谁小看直径, 最小的C_i可能不唯一.
3. 计算机算法的算法与程序
虽然算法与计算机程序密切相关,但二者也存在区别:计算机程序是算法的一个实例,是将算法通过某种计算机语言表达出来的具体形式;同一个算法可以用任何一种计算机语言来表达。
算法列表
图论
路径问题
0/1边权最短路径
BFS
非负边权最短路径(Dijkstra)
可以用Dijkstra解决问题的特征
负边权最短路径
Bellman-Ford
Bellman-Ford的Yen-氏优化
差分约束系统
Floyd
广义路径问题
传递闭包
极小极大距离 / 极大极小距离
Euler Path / Tour
圈套圈算法
混合图的 Euler Path / Tour
Hamilton Path / Tour
特殊图的Hamilton Path / Tour 构造
生成树问题
最小生成树
第k小生成树
最优比率生成树
0/1分数规划
度限制生成树
连通性问题
强大的DFS算法
无向图连通性
割点
割边
二连通分支
有向图连通性
强连通分支
2-SAT
最小点基
有向无环图
拓扑排序
有向无环图与动态规划的关系
二分图匹配问题
一般图问题与二分图问题的转换思路
最大匹配
有向图的最小路径覆盖
0 / 1矩阵的最小覆盖
完备匹配
最优匹配
稳定婚姻
网络流问题
网络流模型的简单特征和与线性规划的关系
最大流最小割定理
最大流问题
有上下界的最大流问题
循环流
最小费用最大流 / 最大费用最大流
弦图的性质和判定
组合数学
解决组合数学问题时常用的思想
逼近
递推/动态规划
概率问题
Polya定理
计算几何 / 解析几何
计算几何的核心:叉积 / 面积
解析几何的主力:复数
基本形
点
直线,线段
多边形
凸多边形 / 凸包
凸包算法的引进,卷包裹法
Graham扫描法
水平序的引进,共线凸包的补丁
完美凸包算法
相关判定
两直线相交
两线段相交
点在任意多边形内的判定
点在凸多边形内的判定
经典问题
最小外接圆
近似O(n)的最小外接圆算法
点集直径
旋转卡壳,对踵点
多边形的三角剖分
数学/数论
最大公约数
Euclid算法
扩展的Euclid算法
同余方程 / 二元一次不定方程
同余方程组
线性方程组
高斯消元法
解mod 2域上的线性方程组
整系数方程组的精确解法
矩阵
行列式的计算
利用矩阵乘法快速计算递推关系
分数
分数树
连分数逼近
数论计算
求N的约数个数
求phi(N)
求约数和
快速数论变换
……
素数问题
概率判素算法
概率因子分解
数据结构
组织结构
二叉堆
左偏树
二项树
胜者树
跳跃表
样式图标
斜堆
reap
统计结构
树状数组
虚二叉树
线段树
矩形面积并
圆形面积并
关系结构
Hash表
并查集
路径压缩思想的应用
STL中的数据结构
vector
deque
set / map
动态规划/记忆化搜索
动态规划和记忆化搜索在思考方式上的区别
最长子序列系列问题
最长不下降子序列
最长公共子序列
一类NP问题的动态规划解法
树型动态规划
背包问题
动态规划的优化
四边形不等式
函数的凸凹性
状态设计
规划方向
线性规划
常用思想
二分
最小表示法
串
KMP
Trie结构
后缀树/后缀数组
LCA/RMQ
有限状态自动机理论
排序
选择/冒泡
快速排序
堆排序
归并排序
基数排序
拓扑排序
排序网络
4. arcgiS判断凸多边形与凹多边形
1)角度法:
判断每个顶点所对应的内角是否小于180度,如果小于180度,则是凸的,如果大于180度,则是凹多边形。
2)凸包法:
这种方法首先计算这个多边形的凸包,关于凸包的定义在此不再赘述,首先可以肯定的是凸包肯定是一个凸多边形。如果计算出来的凸多边形和原始多边形的点数一样多,那就说明此多边形时凸多边形,否则就是凹多边形。
3)顶点凹凸性法
利用以当前顶点为中心的矢量叉乘或者计算三角形的有符号面积判断多边形的方向以及当前顶点的凹凸性。
假设当前连续的三个顶点分别是P1,P2,P3。计算向量P1P2,P2P3的叉乘,也可以计算三角形P1P2P3的面积,得到的结果如果大于0,则表示P3点在线段P1和P2的左侧,多边形的顶点是逆时针序列。然后依次计算下一个前后所组成向量的叉乘,如果在计算时,出现负值,则此多边形时凹多边形,如果所有顶点计算完毕,其结果都是大于0,则多边形时凸多边形。
4)辛普森面积法
利用待判别的顶点以及前后两个顶点所组成的三角形,利用辛普森公式计算其面积,如果此三角形面积与整个多边形面积符号相同,那么这个顶点是凸的;如果此三角形面积与整个多边形面积符号不同,那么这个顶点是凹的,即整个多边形也是凹多边形。