我的困惑源于这样一个事实,即大多数Hashset操作的时间复杂性为O(1),但我想知道是否像下面这样连接两个Hashset:

HashSet<T> firstSet = new HashSet<T> ();
HashSet<T> secondSet = new HashSet<T> ();

firstSet.Concat(secondSet);

是在线性O(N)时间内完成,还是在固定时间内完成.

我已经查看了官方文档,但没有找到基于性能的规范.

推荐答案

ConcatLinq的扩展方法,其是lazy,即当不需要动作时的Linq does nothing.这就是为什么Concat本身具有明显的O(1)时间复杂度- Linq不做任何事情:

// Note, that result is of IEnumerable<T> type
var result = firstSet.Concat(secondSet);

但是,如果我们materialize result,我们将有O(n)的时间复杂度:

// result is HashSet<T>
var result = firstSet
  .Concat(secondSet)  // O(1)
  .ToHashSet();       // O(n)

Csharp相关问答推荐

SignalR客户端不会打印队列位置'

Microsoft. VisualBasic. FileIO. FileSystem. MoveFile()对话框有错误?

在多对多关系上不删除实体

Polly使用泛型重试和重试包装函数

Int和uint相乘得到LONG?

如何使datagridview的列具有响应性,以便不是所有列都更改其宽度

Rx.Net窗口内部可观测数据提前完成

如何在毛伊岛应用程序中完美地同步视图模型和视图的加载?

异步任务导致内存泄漏

Blazor Web App WASM的两个独立项目令人困惑

从另一个不同 struct 的数组创建Newtonsoft.Json.Linq.J数组

如何将默认区域性更改为fr-FR而不是en-US?

为什么当我try 为玩家角色设置动画时,没有从文件夹中拉出正确的图像?

try 访问字典中的模拟对象时引发KeyNotFoundException

Xamarin中出错.表单:应用程序的分部声明不能指定不同的基类

.NET EF Core Automapper项目到筛选不起作用

如何将行添加到DataGrid以立即显示它?

Avalonia MVVM数据模板

部署Aspnet Blazor服务器时出现未处理的Microsoft.AspNetCore.Diagnostics.ExceptionHandlerMiddleware[1]异常

MudBlazor MudTabs-->;选项卡内容高度