相关疑难解决方法(0)

Microsoft内部PriorityQueue <T>中的错误?

在PresentationCore.dll的.NET Framework中,有一个泛型PriorityQueue<T>类,其代码可以在这里找到.

我写了一个简短的程序来测试排序,结果不是很好:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using MS.Internal;

namespace ConsoleTest {
    public static class ConsoleTest {
        public static void Main() {
            PriorityQueue<int> values = new PriorityQueue<int>(6, Comparer<int>.Default);
            Random random = new Random(88);
            for (int i = 0; i < 6; i++)
                values.Push(random.Next(0, 10000000));
            int lastValue = int.MinValue;
            int temp;
            while (values.Count != 0) {
                temp = values.Top;
                values.Pop();
                if (temp >= lastValue)
                    lastValue = temp;
                else
                    Console.WriteLine("found sorting error");
                Console.WriteLine(temp);
            }
            Console.ReadLine();
        } …
Run Code Online (Sandbox Code Playgroud)

.net c# priority-queue

77
推荐指数
2
解决办法
3539
查看次数

N路合并算法

作为Mergesort算法的一部分,广泛研究了双向合并.但我有兴趣找出一个可以执行N路合并的最佳方式吗?

可以说,我有一些N文件,每个文件已经排序了100万个整数.我必须将它们合并为1个单独的文件,这将有1亿个排序整数.

请记住,此问题的用例实际上是基于磁盘的外部排序.因此,在实际场景中也会存在内存限制.因此,一次合并2个文件(99次)的天真方法将无效.假设我们每个阵列只有一个小的可用内存滑动窗口.

我不确定是否已经存在这种N路合并的标准化解决方案.(谷歌搜索并没有告诉我太多).

但是如果你知道一个好的n路合并算法,请发布algo/link.

时间复杂度:如果我们大大增加N要合并的文件()的数量,那将如何影响算法的时间复杂度?

谢谢你的回答.

我没有被问过这个问题,但我觉得这可能是一个有趣的面试问题.因此标记.

algorithm merge

76
推荐指数
3
解决办法
4万
查看次数

.NET 4.0中的并发优先级队列

似乎.NET 4.0中有很多与并发相关的改进可能依赖于并发优先级队列.框架内是否有可靠的优先级队列实现可供重用?

.net c# concurrency

30
推荐指数
4
解决办法
2万
查看次数

为什么.Net框架没有优先级队列类?

Stack Overflow上有一些线程涉及在.Net和C#中实现优先级队列.

我的问题是一个更基本的问题:为什么在.Net框架中没有开箱即用的优先级队列?甚至C++标准库也有一个.

.net priority-queue standard-library library-design data-structures

21
推荐指数
2
解决办法
3111
查看次数

.NET中的堆类

可能重复:
c#中的Fibonacci,Binary或Binomial堆?

在.NET中是否有像堆这样的类?我需要某种收集,我可以从中检索最小值.元件.我只想要3个方法:

  • 加()
  • RemoveMinElement()
  • GetMinElement()

我不能使用排序列表,因为键必须是唯一的,我可能有几个相同的元素.

.net c# heap

19
推荐指数
2
解决办法
7万
查看次数

c#中的Fibonacci,Binary或Binomial堆?

是否有任何堆数据结构实现,斐波那契,二进制或二项式?

参考:这些是用于实现优先级队列的数据结构,而不是用于分配动态内存的数据结构.见http://en.wikipedia.org/wiki/Heap_(data_structure)

谢谢,戴夫

.net c# algorithm data-structures

16
推荐指数
4
解决办法
1万
查看次数

F#优先级队列

F#库是否包含优先级队列?有人可以指点我在F#中实现优先级队列吗?

f# priority-queue

15
推荐指数
5
解决办法
3085
查看次数

LINQ为什么"Enumerable = Enumerable.Skip(N)"慢?

我遇到了LINQ查询性能的问题,所以我创建了一个简单的小例子来演示下面的问题.该代码采用随机的小整数列表,并将分区列表分成几个较小的列表,每个列表总数为10或更少.

问题是(正如我写的那样)代码用N指数增长.这只是一个O(N)问题.当N = 2500时,代码需要10秒才能在我的电脑上运行.

如果有人能解释发生了什么,我会非常高兴.谢谢,马克.

int N = 250;
Random r = new Random();
var work = Enumerable.Range(1,N).Select(x => r.Next(0, 6)).ToList();
var chunks = new List<List<int>>();

// work.Dump("All the work.");  // LINQPad Print
var workEnumerable = work.AsEnumerable();

Stopwatch sw = Stopwatch.StartNew();
while(workEnumerable.Any())  // or .FirstorDefault() != null
{
    int soFar = 0;
    var chunk = workEnumerable.TakeWhile( x => 
                          {
                              soFar += x;               
                              return  (soFar <= 10);
                          }).ToList();
    chunks.Add(chunk);          // Commented out makes no difference.
    workEnumerable = workEnumerable.Skip(chunk.Count); // <== SUSPECT …
Run Code Online (Sandbox Code Playgroud)

c# linq ienumerable

14
推荐指数
2
解决办法
1317
查看次数

.NET中是否存在已排序的队列?

我需要一个相当专业的.NET集合,我不认为BCL可以帮助我,但我想如果有人知道类似的事情,我会把它扔出去.

基本上,我的要求是:

  • 我有一对值列表,例如:(3,10),(5,10),(3,7),(5,5)
  • 订单很重要,即.(3,10)!=(10,3)
  • 单个值的副本很好,但应删除重复对(最好是静默).
  • 踢球者是,我需要这个列表一直排序.我只对任何时候排序算法定义的列表中的第一个值感兴趣.

所以,我希望能够做的一些示例代码(正如我设想它可能会实现,其他适合上述的实现都很好):

public class Pair
{
    public Pair(int first, int second)
    { First = first; Second = second; }
    public int First { get; set; }
    public int Second { get; set; }
}

SortedQueue<Pair> foo = new SortedQueue<Pair>((left, right) => {
    return right.First - left.First;
});

foo.Add(new Pair(10, 3));
foo.Add(new Pair(4, 6));
foo.Add(new Pair(6, 15));
foo.Add(new Pair(6, 13)); // This shouldn't cause a problem

Pair current = foo.Shift(); // current = (4, 6)
Run Code Online (Sandbox Code Playgroud)

c# collections

9
推荐指数
2
解决办法
1万
查看次数

如何在C#中将元素插入队列?

在C#中,我使用了Queue集合.我可以很容易地入队或出队.好的,现在我想在队列中间或队列的开头插入一些东西.我没有找到任何方法来做这样的事情.你推荐什么作为替代收藏?

c# queue

8
推荐指数
3
解决办法
2万
查看次数