我有一组元素 {1,2,3},{2,3,4},{1,2,4},{7,8},{3,4,7,9},{ 12,16,18,19}, {1,2,4}。
我需要一个包含上面列表的数据结构只出现一次。如果出现任何新列表并且它与任何现有列表匹配,那么我不希望将其添加到结果数据结构中。
对于上面的例子,预期的结果应该是: {1,2,3},{2,3,4},{1,2,4},{7,8},{3,4,7,9},{12,16,18,19}。
我拥有的一个解决方案是使用 Trees。 例如:{1,2,3},{1,2,4} 在上面的列表中,我将从值为 2 的节点分支出第一个列表的值 3 和第二个列表的值 4。这样我可以从根跟踪列表并确定列表是否出现。
Root
|
|
1
|
|
------2------
| |
| |
3 4
请建议是否有任何算法可以使用 C 以简单的方式使其更快。
最佳答案
您可以使用图形数据结构来实现这一点。
要在 c 中执行此操作,您可以使用以下任一方法:
- 邻接矩阵
在这种方法中,您需要维护数字之间的关系矩阵,请查看下图:
- 链表:
在这个方法中,您将维护一个连接列表,即如果 2 与 1,3,4 有连接,那么将创建一个 1,3,4 的列表,其头部值为 : 2
这些图像取自:http://simplestcodings.blogspot.in . 您可以在同一站点上找到很好的解释和示例代码:http://simplestcodings.blogspot.in/2013/09/graphs.html链接
希望对您有所帮助。
关于c - 在包含列表的列表中搜索元素列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38850663/