博客
关于我
Objective-C实现最近点对问题(附完整源码)
阅读量:798 次
发布时间:2023-02-21

本文共 1087 字,大约阅读时间需要 3 分钟。

Objective-C实现最近点对问题

点的定义

#import @interface Point : NSObject {@property (nonatomic, assign) double x;@property (nonatomic, assign) double y;}

  

预处理步骤

  1. 将所有点按照横坐标进行排序
  2. 从中选出一部分点作为递归分治的子问题
  3. 递归处理左右子问题,然后合并结果

递归函数实现

+(NSArray *)closestPairOfPoints:(NSArray *)points {

// 基线情况if (points.count <= 3) {return [self bruteForce(points)];}

// 分割点集Point *midPoint = [points[points.count/2]];NSArray *leftPoints = [self splitPoints:points[0...midPoint];NSArray *rightPoints = [self splitPoints:points[midPoint...-1]];

// 递归求解左右子问题NSArray *leftPair = [self closestPairOfPoints:leftPoints];NSArray *rightPair = [self closestPairOfPoints:rightPoints];

// 合并结果if ([leftPair distanceTo:rightPair] < [self distanceToPoints:leftPoints rightPoints]) {return leftPair;} else {return rightPair;}}

// 分割点集-(NSArray *)splitPoints:(NSArray *)points {return [self sortedPointsByX:points];}

  

优化部分

  • 减少分割次数
  • 使用平面扫描法减少计算量
  • 提前终止递归

转载地址:http://ieifk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现nested brackets嵌套括号算法(附完整源码)
查看>>
Objective-C实现nevilles method多项式插值算法(附完整源码)
查看>>
Objective-C实现newtons second law of motion牛顿第二运动定律算法(附完整源码)
查看>>
Objective-C实现newton_raphson牛顿拉夫森算法(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现NLP中文分词(附完整源码)
查看>>
Objective-C实现not gate非门算法(附完整源码)
查看>>
Objective-C实现number of digits解字符数算法(附完整源码)
查看>>
Objective-C实现NumberOfIslands岛屿的个数算法(附完整源码)
查看>>
Objective-C实现n皇后问题算法(附完整源码)
查看>>
Objective-C实现OCR文字识别(附完整源码)
查看>>
Objective-C实现odd even sort奇偶排序算法(附完整源码)
查看>>
Objective-C实现ohms law欧姆定律算法(附完整源码)
查看>>
Objective-C实现page rank算法(附完整源码)
查看>>
Objective-C实现PageRank算法(附完整源码)
查看>>
Objective-C实现pancake sort煎饼排序算法(附完整源码)
查看>>
Objective-C实现pascalTriangle帕斯卡三角形算法(附完整源码)
查看>>
Objective-C实现perfect cube完全立方数算法(附完整源码)
查看>>
Objective-C实现perfect number完全数算法(附完整源码)
查看>>
Objective-C实现PNG图片格式转换BMP图片格式(附完整源码)
查看>>