【问题标题】:Number of right angled triangles given n points给定 n 个点的直角三角形的数量
【发布时间】:2018-07-25 18:08:00
【问题描述】:

给定 xy 平面中的 n 个点,我需要找到可以使用这些点作为顶点形成的直角三角形的数量。我确实提出了一个 O(n3) 解决方案,您一次取 3 个顶点并检查它们是否形成直角三角形。我想知道这个问题的更优化的解决方案。

【问题讨论】:

  • n 的任何限制条件?
  • 我投票决定将此问题作为题外话结束,因为它正在请求算法并且没有特定的编程问题
  • @PhamTrung 没有。我只想知道最优化的方案

标签: algorithm


【解决方案1】:

O(n^2) 解决方案可能是这样的:

  • 逐个遍历每个点,
  • 处理每个点时,计算该点与列表中其他点形成的单位向量;然后将它们存储在 HashMap 中。对于这些向量中的每一个,计算与它形成直角的单位向量并在 HashMap 中查找它。

【讨论】:

  • 从理论上考虑,您的解决方案相当优雅。但是当你对向量进行归一化时,你忽略了向量的长度。勾股定理基于直角三角形边的长度,这意味着您也需要考虑长度。即使您修改算法来处理它们,也会增加您提供的解决方案的时间复杂度。
  • @ilim,为什么需要长度来确定两个向量是否垂直?
  • @ilim 你不需要考虑我猜的长度:thinking: ?你可以使用点积属性来计算。
  • @PhamTrung 看来我误解了您对 HashMap 的使用。你是对的。我还没有考虑过正式的证明,但你的算法看起来很有效。
  • @PhamTrung 您是否将每个单位向量的频率存储在 HashMap 中?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多