【问题标题】:Algorithm for determining similarity of objects [closed]确定对象相似性的算法[关闭]
【发布时间】:2014-05-05 15:45:23
【问题描述】:

我需要一些帮助来为以下场景提出算法:

我有一个接收对象列表的函数。这些对象的形式是 [type, value],其中 type 是四个选项之一(可以说,介于 0-3 之间的数字),并且 value 可以是任意的。

所以输入可能是这样的:

{ { [0, 5], [1, 8] }, { [0,5], [3, 88] }, { [0,5], [1,25], [3,88] } }

我需要算法做的是,创建一个名为 commonList 和 uncommonList 的列表。 commonList 将仅包含该对的类型部分,但前提是列表中的每个集合都具有该类型的相同值。 uncommonList 将包含每个 [type,value] 对的类型,它不是列表中每个集合的相同/部分。

所以对于示例输入:

commonList = { 0 } uncommonList = { 1, 3 }

commonList 包含值 0,因为每个集合都有一个类型为 0 的对,并且每个对具有相同的值。

uncommonList 包含值 1,因为所有 3 个集合不包含相同的 [1, value] 对。值 3 的情况相同。

我很难想出这个算法。我将编辑并发布我现在拥有的一些代码,只需先概括一下即可

【问题讨论】:

  • 那么,问题是什么?
  • 主要是想出一个高效的算法来完成任务。
  • 只需创建一个映射键 -> 值列表。然后检查值列表中仅包含 1 个值的键。
  • 问题在于,要使一个项目成为 commonList,它必须在每个集合中。所以如果一个集合的值是 [2,5],而其他集合没有类型为 2 的对,那么我们应该把它放在 uncommonList 中,而不是 commonList 中。

标签: algorithm computer-science


【解决方案1】:

如果我正确理解您的问题,您希望找到所有集合共有的对 [key,value] 的集合。

要有效地实现该目标,您可以执行以下操作:

  • 使用第一组的内容初始化对 CoP 的公共组。 CoP 的每个元素都是原始对加上一个额外的计数整数。在您的示例中,`CoP
  • 对于每组,请执行以下操作:
    • 重置 CoP 中每对的关联整数。
    • 对于每对:
      • 如果 CoP 中存在该对,则增加相关的计数整数。
    • 扫描 CoP 中的所有对:
      • 删除未访问过的每一对,即相关整数等于 0 的每一对。
    • 如果 CoP 为空,则到此结束
  • commonList 是 CoP 中所有类型元素的集合; uncommonList 是所有可能类型集合中的补集。

如果你能保证你有一组真实的对象(不是一组中相同对象的两倍),你可以走得更快:

  • 使用第一组的内容初始化对 CoP 的公共组。 CoP 的每个元素都是原始对加上一个额外的计数整数。在您的示例中,`CoP
  • 对于每组,请执行以下操作:
    • 对于每对:
      • 如果 CoP 中存在该对,则增加相关的计数整数。
  • 扫描 CoP 中的所有对:
    • 删除每组未访问过的每一对,即每对的关联整数不等于对象集的数量。
  • commonList 是 CoP 中所有类型元素的集合; uncommonList 是所有可能类型集合中的补集。

您可以通过对象之间的距离轻松概括这一点(如果它们的距离低于某个值,则为相同的对象)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-09
    • 1970-01-01
    • 2011-03-27
    • 2023-03-11
    • 1970-01-01
    • 2023-03-25
    • 2011-11-01
    相关资源
    最近更新 更多