我有一组元素{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}。
我遇到的一个解决方案是使用树木。 例如:{1,2,3},{1,2,4} 在上面的列表中,我将从具有值2的节点分支出第一个列表的值3和第二个列表的值4.这样,我可以从根跟踪列表并查找列表是否出现。
Root
|
|
1
|
|
------2------
| |
| |
3 4
请建议是否有任何算法使其更快,并以简单的方式使用C.
答案 0 :(得分:0)
您可以使用图形数据结构来实现这一目标。
要在c中执行此操作,您可以使用以下任一方法:
在此方法中,您需要维护数字之间的关系矩阵,请查看下图:
在这种方法中,你将保持一个连接列表,即如果2与1,3,4有连接,那么将生成1,3,4的列表,其头部值为:2
这些图片来自:http://simplestcodings.blogspot.in。 您可以在同一网站上找到很好的解释和示例代码:http://simplestcodings.blogspot.in/2013/09/graphs.html链接
希望它有所帮助。