c# - 制作不同数组的优化算法

标签 c# algorithm optimization

<分区>

我正在寻找一种优化的算法,它给出我编写的结构的数组(或列表)并删除重复的元素并返回它。
我知道我可以通过复杂度为 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 尝试 - 用简单的英语来说,有什么区别?

c - 手动优化嵌套循环

optimization - 如何连接两个SSE寄存器的低半部分?

c# - 将 Windows Azure 表存储中的 RowKey 属性设置为(现在的日期时间 + 另一个属性)

c# - 当它也需要 MDW 文件时,如何将 Access DB 添加到我的 C# 项目中?

c# - Func<> 和原始代码

algorithm - 查找可被给定数字整除的数组元素的最大总和

database - 需要快速存储和检索(搜索)集合和子集的算法