Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中交换字典类型参数的复杂性#_C#_Algorithm_Linq_Group By_Complexity Theory - Fatal编程技术网

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();
  • 该方法的复杂性是什么?O(n)?如果复杂性=GroupBy操作的复杂性-我没有找到值。请告诉我,并提供一个链接到一篇文章
  • 有没有更高效/优雅的方法来进行这种交换
  • 注:我明确地编写变量类型
    输入
    输出
    ,以表明我不需要
    输出
    类型为
    词汇
    。我需要一个容器通过
    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
    with
    input.ToLookup(i=>i.Value,i=>i.Key)
    …或一个
    ILookup
    ,它与
    input.ToLookup(i=>i.Value,i=>i.Key)
    i词典