我有两套A和B。
A
--
1
2
6
B
--
1
2
3
4
当我比较集合A和B时,我需要得到值6作为输出,当集合B与A比较时,值4作为输出。
我想知道做这个最好的算法是什么我写了一个,但它有二次复杂度。它基本上迭代一个集合,并在循环中迭代第二个集合来检查值的存在。我觉得这是低效的。
上下文
我在数据库中有一组值,我将在ui中显示这些值。用户可以删除或添加新项目到列表中,然后按“保存更改”按钮,该按钮将保留对数据库的所有更改因此,在这里我需要插入新添加的项目到数据库和删除删除的项目。
因此,我通过第一组,将有新添加的项目,并且已经存在。我加载另一个集合,它将包含数据库中的所有项。现在,如果我使用上面的算法比较SET A(新列表)和SET B(数据库列表),并使用塞塔中存在的项目,而不是SetB的项目,则得到所有新添加的项目。然后将SETB与SETA进行比较,SETB中不存在的所有项目都是删除的。我对更好算法的建议持开放态度。
任何帮助都很好。
最佳答案
如果对两个集合都排序,可以从两个集合的开头开始并遍历它们,比较第一个元素以查看另一个集合中缺少哪些元素。这在线性时间内有效。
对于不可约集,首先将它们排序为O(n(n))时间,然后在线性时间内比较它们,总时间复杂度为O(n(n))。根据应用程序的详细信息,也可以随时对集合进行排序,以便在需要时方便地进行比较。