C#最优队列最小堆小顶堆大顶堆小根堆大根堆PriorityQueue的使用

本文探讨了.NET框架中的PriorityQueue在.NET8中的使用,重点比较了先判断后入队和直接入队出队的效率,以及两步操作与合并操作的性能。实验结果显示,直接入队出队操作更为高效,无需额外的顶点判断。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最优队列有多种叫法,什么小根堆,大根堆,小顶堆,大顶堆。

队列分多种,线性队列(简单队列),循环队列,最优队列等等。

最优队列,可以看作堆叠箱子,越小的越在上面,或者最大的越在上面。目的就是求出前面最值。比如最大的前3个,或最小的前3个。

framework中只能自己创建类,或者变通由sortedset等来做,现在.net6及以后有了。

下面由.net8(反正它也长期被支持了,就用它吧)。

PriorityQueue定义时要指明两个,前者是元素(对象),后者是优先级,一般是整型,如果是自定义类型,需要对这个优先级自己再定义一个比较器,以便最优队列根据这个比较得知哪个“最优”(最大或最小)。

下面创建多个结构体变量,用大量的数来入队,选取前4个(根据结构体的成员value)。

由于选4个前4个最大值,因此我们设置5为最大容量。满4后就要开始考虑出队问题。

第一种:   满4后,是先判断顶点后入队,还是直接入队出队,这两者哪个效率更优?简单测试一下:

    public struct RecSample
    {
        public int Name { get; set; }
        public int Value { get; set; }
    }

    //public class RecCompare : IComparer<RecSample>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值