<分区>
我正在寻找一种优化的算法,它给出我编写的结构的数组(或列表)并删除重复的元素并返回它。
我知道我可以通过复杂度为 O(n^2) 的简单算法来完成;但我想要一个更好的算法。
我们将不胜感激。
<分区>
我正在寻找一种优化的算法,它给出我编写的结构的数组(或列表)并删除重复的元素并返回它。
我知道我可以通过复杂度为 O(n^2) 的简单算法来完成;但我想要一个更好的算法。
我们将不胜感激。
最佳答案
对于实际使用,LINQ 的 Distinct
是最简单的解决方案。它使用基于哈希表的方法,可能与以下算法非常相似。
如果您对这样的算法感兴趣:
IEnumerable<T> Distinct(IEnumerable<T> sequence)
{
var alreadySeen=new HashSet<T>();
foreach(T item in sequence)
{
if(alreadySeen.Add(item))// Add returns false if item was already in set
yield return;
}
}
如果有 d
个不同的元素和 n
个元素,那么这个算法将占用 O(d)
内存和 O( n)
时间。
由于此算法使用哈希集,因此需要分布良好的哈希来实现 O(n)
运行时。如果散列很糟糕,运行时可能会退化为 O(n*d)
关于c# - 制作不同数组的优化算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17464934/
相关文章:
c# - WebClient CookieContainer 在 .NET 4.0+ 中运行良好,但在早期版本中运行不佳
algorithm - 将给定问题优化为线性时间而不用担心空间
algorithm - 后缀树 VS 尝试 - 用简单的英语来说,有什么区别?
optimization - 如何连接两个SSE寄存器的低半部分?
c# - 将 Windows Azure 表存储中的 RowKey 属性设置为(现在的日期时间 + 另一个属性)
c# - 当它也需要 MDW 文件时,如何将 Access DB 添加到我的 C# 项目中?