C# C语言中交换字典类型参数的复杂性#
我有一本C# C语言中交换字典类型参数的复杂性#,c#,algorithm,linq,group-by,complexity-theory,C#,Algorithm,Linq,Group By,Complexity Theory,我有一本字典,其中a的对象是唯一的,B的对象不是唯一的 我想按B的对象对数据进行分组 例如 字典输入=生成输入(); 列表输出=输入 .GroupBy(pair=>pair.Value,pair=>pair.Key) .ToList(); 该方法的复杂性是什么?O(n)?如果复杂性=GroupBy操作的复杂性-我没有找到值。请告诉我,并提供一个链接到一篇文章 有没有更高效/优雅的方法来进行这种交换 注:我明确地编写变量类型输入和输出,以表明我不需要输出类型为词汇。我需要一个容器通过a通过B 该
字典
,其中a
的对象是唯一的,B
的对象不是唯一的
我想按B
的对象对数据进行分组
例如
字典输入=生成输入();
列表输出=输入
.GroupBy(pair=>pair.Value,pair=>pair.Key)
.ToList();
输入
和输出
,以表明我不需要输出
类型为词汇
。我需要一个容器通过a
通过B
该方法的复杂性是什么
对,是O(n)GroupBy
使用哈希代码对值进行分组;假设B
具有良好的哈希函数,构建组表的摊销成本为O(n),其中包括“增长”每个组的摊销成本
有没有更高效/优雅的方法来进行这种交换
O(n)是最有效的。您可以从分组中生成字典,而不是列表:
IDictionary<B,List<A>> output = input
.GroupBy(pair => pair.Value)
.ToDictionary(g => g.Key, g => g.Select(p.Key).ToList());
IDictionary输出=输入
.GroupBy(pair=>pair.Value)
.ToDictionary(g=>g.Key,g=>g.Select(p.Key).ToList());
该方法的复杂性是什么
对,是O(n)GroupBy
使用哈希代码对值进行分组;假设B
具有良好的哈希函数,构建组表的摊销成本为O(n),其中包括“增长”每个组的摊销成本
有没有更高效/优雅的方法来进行这种交换
O(n)是最有效的。您可以从分组中生成字典,而不是列表:
IDictionary<B,List<A>> output = input
.GroupBy(pair => pair.Value)
.ToDictionary(g => g.Key, g => g.Select(p.Key).ToList());
IDictionary输出=输入
.GroupBy(pair=>pair.Value)
.ToDictionary(g=>g.Key,g=>g.Select(p.Key).ToList());
GroupBy是一种O(n)操作。操作模式与创建字典非常相似,在字典中进行查找(类似字典的容器,允许每个键有多个值),因此每个元素的插入为~O(1),然后枚举以生成组。GroupBy是一个O(n)操作。操作模式与创建字典非常相似,在字典中进行查找(类似字典的容器,允许每个键有多个值),因此每个元素的插入为~O(1),然后进行枚举以生成组…或ILookup
,这大致相当于IDictionary
withinput.ToLookup(i=>i.Value,i=>i.Key)
…或一个ILookup
,它与input.ToLookup(i=>i.Value,i=>i.Key)
的i词典
。