Return 基于排名的 Set 中的某些元素

Return certain element from Set based on ranking

我正在做一个项目,我在一个集合中有许多独特的字符串(或者它可以是一个数组)。我正在尝试编写一个函数,该函数 returns 该 Set 中具有最高“值”的字符串。

“值”由包含许多其他字符串的层次结构确定,每个字符串都位于自己的级别中。例如:

1 级(最高) A1、A2、A3、A4 ...

2 级 B1、B2、B3、B4 ...

3 级(最低) C1、C2、C3 ...

例如,如果我的初始 Set 中的字符串是 [C2、C3、A2、B1],那么我希望返回 A2。在存在“值”关系的情况下,可以返回第一个字符串。

一个可能的解决方案可能是从最高级别开始遍历该层次结构(可能是数组的数组),然后检查当前迭代的值是否包含在 Set 中。如果是,则可以返回该值。

有人能想出更好的方法来构建/完成这个吗?谢谢!

您的一般方法听起来很合理,但更好的方法是不使用 arrays 的层次结构,而是使用 sets[=25= 的层次结构].检查一个项目是否存在于 Set 中是 O(1),不像数组,后者是 O(n)。这样,整体算法就是O(n ^ 2),而不是O(n ^ 3).

for (const levelSet of hierarchy) {
  for (const str of inputStrings) {
    if (levelSet.has(str)) return str;
  }
}

除非可以从字符串的结构预测级别而无需遍历层次结构,否则我认为没有更简单的解决方案。

如果级别 可以 预测而无需迭代 - 例如,如果以 A 开头的字符串在第一层次中,依此类推 - 它可能会变得更少通过迭代输入中的每个字符串而不触及层次结构来实现昂贵的。 (取决于从给定字符串确定层次结构级别所涉及的计算)