【发布时间】:2011-01-02 12:10:58
【问题描述】:
我有一个包含 N 个项目的大表,每个项目具有 M (M>=3) 个不同的属性, 从这个表中,我必须删除同一个表中包含在所有属性上得分相等或更好的项目的所有项目。
我有一个 algorithm (python) 已经解决了它,但它是输出敏感的,最坏的情况是大约。 O((n²+n)/2) 当没有项目被移除时。 这对于我的项目来说太慢了(其中 100,000 个项目的数据集,每个项目有 8 个属性并不少见),所以我需要接近 O(m*n log n) 最坏情况的东西,但我不知道这个问题是否可以这么快就解决了。
示例问题案例及其解决方案:
[更高的价值=更好] 唱歌跳舞演戏 10 20 10 乙 10 20 30 C 30 20 10 30 10 30 10 30 20 F 30 10 20 G 20 30 10解雇所有候选人,其中有候选人表现相同或 在所有学科中都更好。
解决方案:
- A 被解雇,因为 B、C、E、G 在所有学科中的表现都相同或更好。
- F 被解雇,因为 D 在所有学科中的表现都相同或更好。
是否存在有效解决这个问题的算法,它是什么?
【问题讨论】:
-
直观地说,“最坏”情况(或最难找到)是多个条目几乎相互抵消的情况。例如考虑 A 10 20 10 B 20 10 20 B 几乎抵消了 A,而 A 几乎抵消了 B。如果这种情况不发生,那么解决方案将很容易在 O(n) 时间内实现。
标签: algorithm arrays filter big-o multidimensional-array