我有一个自定义类。该类具有float,date,char和string属性。样本类定义如下。
class MyClass {string str1; string str2; date date1; date date2;浮动金额1;浮动金额2; char char1,char char2};
任务是识别该类对象列表中的重复项。每个对象都可以标记为只有一个其他对象的副本。对于为保留的对象标识的所有重复项,将创建重复项列表。执行某个操作并最终移除重复项并仅保留唯一对象。这里提到的第二个操作与该任务无关,因此不再详细提及。
我已经定义了一个比较运算符来检测该类的两个对象是否相同。比较基于比较该类的各个属性,然后查找将它们匹配的那些属性的组合作为一组来确定两个对象是否相同。各个属性的比较是模糊的。然后引用用于检查类匹配的属性组合的规则库来确定两个对象是否被认为是相同的。
当前算法的时间复杂度为O(n ^ 2)。
从该类对象列表中删除重复项的最有效算法是什么?
该列表中的最大对象数量为千或最多两千。该类的每个实例都不会消耗大量内存。通常,列表中的对象数小于50-100。我们的分析研究表明,在列表中可以包含的大量示例中,我们没有超过2或3%的重复项。应避免误报和漏报。这又是在问题的上下文之外,因为它是比较运算符的一个函数,我不想解决。
我在考虑使用当前的O(n ^ 2)算法来排序列表,然后使用单个传递来查找和删除重复项将产生O(n * log n)+ O(n)时间复杂度。后一种算法用于大n - >> 10将比具有O(n ^ 2)时间复杂度的算法执行得更好。排序可能需要写一个小于/大于运算符的操作。
我会欣赏考虑空间和时间复杂性的选项。