- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
C#不提供优先级队列的本地实现。
在Stackoverflow上,对此类问题的常见答案是使用Power Collections。
我应该继续这样做,还是有不利之处?
最佳答案
实际上,Power Collections提供了.NET框架中尚未存在的常用数据结构的出色实现。尽管使用该选项并不可怕,但我想指出这种方法的一个重要缺陷。
OrderedMultiDictionary(以及所有其他Power Collection类)使用一棵红黑树来创建键值对的有序包。对于优先级队列,RB树往往是劣等的数据结构。我假设优先级值可哈希为整数。
原因很简单-字典可以立即在O(1)中跳转到特定的优先级值,在字典中可以使用专门的数据结构来存储该优先级的值(即队列)。
测试
为了检查我的主张,我编写了一个简单的基准,该基准根据3种不同的思想比较优先级队列结构:
订购了Power CollectionsMultiDictionary
分类词典
字典
第二个选项使用SortedDictionary,其内部实现为BST。第三个选项使用带有O(1)查找的简单Dictionary。
我用Y轴上显示的各种元素和X轴上显示的不同值进行了测试。特定组合的结果显示为3x3值矩阵。第一行引用选项1(OrdererdMultiDictionary,第二行引用SortedDictionary,第三行引用Dictionary。这三行中的第一行值表示对相应数量的值进行排队的时间,第二行表示对值进行枚举的时间在所有值上,第三次再次使所有值出队。
所有时间均为对数2。值10表示2 ^ 10ms = 1s,尽管绝对值的重要性不高。元素的数量增加了一倍,这意味着,如果该结构的行为类似于O(n),则时间每次应增加1。
在水平方向上,每列将不同值的数量乘以32。因此,第一列(一遍又一遍地插入相同的值)显示了保存这些值的内部数据结构的性能。
所使用的计算机是具有16 GB固态硬盘的i7。
| 1 | 32 | 1024 | 32768 | 1048576 |
128
| -4.9 / -4.3 / n/a | -4.7 / -4.1 / n/a | -4.8 / -2.9 / n/a | -4.9 / -2.9 / n/a | -4.9 / -2.9 / n/a |
| -7.5 / -6.1 / -5.3 | -6.5 / -5.7 / -5.1 | -4.7 / -4.9 / -4.3 | -4.6 / -4.7 / -4.2 | -4.6 / -4.8 / -4.2 |
| -7.5 / -7.6 / -6.6 | -6.8 / -7.3 / -6.3 | -5.9 / -5.9 / -3.0 | -6.2 / -6.4 / -2.8 | -6.2 / -6.3 / -2.8 |
256
| -3.8 / -3.2 / n/a | -3.7 / -3.1 / n/a | -3.7 / -2.2 / n/a | -3.8 / -1.8 / n/a | -3.7 / -1.8 / n/a |
| -6.8 / -5.5 / -4.4 | -5.8 / -5.4 / -4.2 | -3.8 / -4.3 / -3.4 | -3.5 / -4.1 / -3.2 | -3.5 / -4.1 / -3.1 |
| -6.6 / -6.9 / -5.7 | -6.1 / -6.7 / -5.7 | -5.5 / -5.3 / -1.8 | -5.3 / -5.0 / -0.9 | -5.3 / -5.6 / -1.0 |
512
| -2.7 / -2.1 / n/a | -2.5 / -2.1 / n/a | -2.5 / -1.5 / n/a | -2.6 / -0.7 / n/a | -2.6 / -0.7 / n/a |
| -5.9 / -5.2 / -3.4 | -4.9 / -5.0 / -3.3 | -3.2 / -4.2 / -2.6 | -2.4 / -3.2 / -2.1 | -2.3 / -3.2 / -2.0 |
| -5.7 / -6.1 / -4.9 | -5.2 / -6.1 / -4.8 | -4.8 / -5.0 / -1.7 | -4.3 / -4.0 / 1.0 | -4.4 / -4.7 / 1.0 |
1024
| -1.6 / -1.0 / n/a | -1.4 / -1.0 / n/a | -1.4 / -0.7 / n/a | -1.5 / 0.4 / n/a | -1.5 / 0.3 / n/a |
| -4.9 / -4.7 / -2.4 | -4.1 / -4.5 / -2.3 | -2.6 / -4.0 / -1.8 | -1.2 / -2.3 / -1.0 | -1.2 / -2.3 / -0.9 |
| -4.7 / -5.4 / -3.9 | -4.4 / -5.3 / -3.8 | -4.1 / -4.6 / -1.6 | -3.3 / -3.0 / 2.9 | -3.5 / -3.8 / 3.0 |
2048
| -0.4 / 0.1 / n/a | -0.3 / 0.1 / n/a | -0.3 / 0.3 / n/a | -0.3 / 1.5 / n/a | -0.5 / 1.4 / n/a |
| -4.0 / -4.1 / -1.4 | -3.2 / -4.0 / -1.3 | -1.7 / -3.5 / -0.9 | -0.2 / -1.4 / 0.1 | -0.2 / -1.3 / 0.1 |
| -3.8 / -4.5 / -2.9 | -3.5 / -4.4 / -2.9 | -3.2 / -3.9 / -1.0 | -2.5 / -2.0 / 4.9 | -2.4 / -2.1 / 4.9 |
4096
| 0.7 / 1.2 / n/a | 0.8 / 1.2 / n/a | 0.9 / 1.3 / n/a | 0.8 / 2.8 / n/a | 0.6 / 2.9 / n/a |
| -3.0 / -3.2 / -0.4 | -2.2 / -3.3 / -0.3 | -0.8 / -3.0 / 0.1 | 0.9 / -0.4 / 1.1 | 0.9 / -0.2 / 1.2 |
| -2.9 / -3.5 / -1.9 | -2.6 / -3.5 / -1.9 | -2.3 / -3.2 / -0.9 | -1.6 / -1.1 / 6.6 | -1.3 / -1.1 / 6.9 |
8192
| 1.8 / 2.8 / n/a | 1.9 / 3.0 / n/a | 2.0 / 3.0 / n/a | 1.9 / 4.0 / n/a | 1.8 / 4.1 / n/a |
| -2.0 / -2.4 / 0.6 | -1.3 / -2.4 / 0.7 | 0.1 / -2.2 / 1.1 | 1.8 / 0.4 / 2.1 | 2.1 / 0.9 / 2.3 |
| -1.9 / -2.6 / -1.0 | -1.6 / -2.5 / -0.9 | -1.4 / -2.4 / -0.3 | -0.6 / -0.3 / 8.0 | -0.5 / 0.1 / 8.9 |
16384
| 2.9 / 3.7 / n/a | 3.0 / 3.6 / n/a | 3.1 / 3.8 / n/a | 3.1 / 4.6 / n/a | 3.0 / 5.2 / n/a |
| -1.0 / -1.5 / 1.6 | -0.3 / -1.5 / 1.7 | 1.1 / -1.4 / 2.0 | 2.4 / 0.7 / 2.9 | 3.2 / 1.9 / 3.6 |
| -0.9 / -1.6 / 0.0 | -0.6 / -1.6 / 0.1 | -0.5 / -1.5 / 0.4 | 0.0 / -0.1 / 8.0 | 0.6 / 1.2 / 10.9 |
32768
| 4.0 / 5.0 / n/a | 4.1 / 5.0 / n/a | 4.3 / 5.0 / n/a | 4.2 / 5.5 / n/a | 4.1 / 6.4 / n/a |
| -0.1 / -0.5 / 2.6 | 0.7 / -0.5 / 2.7 | 2.0 / -0.5 / 3.1 | 3.1 / 0.9 / 3.8 | 4.3 / 3.0 / 4.8 |
| 0.1 / -0.6 / 1.0 | 0.4 / -0.6 / 1.1 | 0.5 / -0.5 / 1.3 | 0.9 / 0.4 / 8.0 | 1.6 / 2.3 / 12.9 |
65536
| 5.2 / 6.6 / n/a | 5.4 / 6.4 / n/a | 5.5 / 6.4 / n/a | 5.5 / 6.8 / n/a | 5.4 / 7.4 / n/a |
| 1.0 / 0.4 / 3.6 | 1.8 / 0.5 / 3.7 | 3.0 / 0.4 / 4.1 | 4.2 / 1.9 / 4.9 | 5.5 / 4.2 / 6.0 |
| 1.1 / 0.4 / 2.0 | 1.4 / 0.4 / 2.1 | 1.5 / 0.5 / 2.4 | 2.0 / 1.4 / 9.8 | 3.2 / 3.4 / 14.8 |
131072
| 6.5 / 7.8 / n/a | 6.6 / 7.6 / n/a | 6.8 / 7.4 / n/a | 6.9 / 7.7 / n/a | 6.8 / 8.6 / n/a |
| 2.0 / 1.4 / 4.6 | 2.9 / 1.4 / 4.8 | 4.1 / 1.5 / 5.2 | 5.2 / 2.4 / 5.8 | 6.8 / 5.4 / 7.0 |
| 2.1 / 1.4 / 3.1 | 2.4 / 1.4 / 3.1 | 2.5 / 1.5 / 3.3 | 3.0 / 2.0 / 9.9 | 4.4 / 4.6 / 16.6 |
262144
| 7.5 / 8.9 / n/a | 7.6 / 8.9 / n/a | 7.8 / 8.6 / n/a | 8.0 / 8.8 / n/a | 8.2 / 9.6 / n/a |
| 3.0 / 2.4 / 5.6 | 3.9 / 2.4 / 5.7 | 5.1 / 2.4 / 6.1 | 6.1 / 2.9 / 6.7 | 8.1 / 6.4 / 8.1 |
| 3.1 / 2.5 / 4.1 | 3.3 / 2.4 / 4.1 | 3.5 / 2.4 / 4.2 | 4.7 / 3.6 / 9.9 | 5.7 / 5.8 / 18.2 |
524288
| 8.6 / 10.0 / n/a | 8.8 / 10.0 / n/a | 9.0 / 9.6 / n/a | 9.4 / 9.7 / n/a | 9.3 / 10.4 / n/a |
| 4.0 / 3.4 / 6.6 | 4.9 / 3.4 / 6.7 | 6.1 / 3.4 / 7.1 | 7.0 / 3.7 / 7.6 | 8.9 / 7.0 / 8.8 |
| 4.1 / 3.5 / 5.0 | 4.4 / 3.4 / 5.1 | 4.5 / 3.4 / 5.2 | 4.9 / 3.6 / 9.9 | 6.8 / 6.5 / 19.2 |
1048576
| 9.7 / 11.0 / n/a | 9.9 / 11.1 / n/a | 10.2 / 10.7 / n/a | 10.7 / 10.7 / n/a | 10.7 / 11.2 / n/a |
| 5.0 / 4.4 / 7.5 | 5.9 / 4.4 / 7.7 | 7.1 / 4.4 / 8.1 | 8.0 / 4.6 / 8.5 | 9.7 / 7.3 / 9.8 |
| 5.1 / 4.4 / n/a | 5.3 / 4.4 / n/a | 5.5 / 4.4 / n/a | 5.9 / 4.6 / n/a | 7.7 / 6.8 / n/a |
2097152
| 10.8 / 12.0 / n/a | 11.0 / 12.1 / n/a | 11.3 / 11.8 / n/a | 12.1 / 11.8 / n/a | 12.0 / 12.1 / n/a |
| 6.0 / 5.4 / 8.5 | 7.0 / 5.4 / 8.7 | 8.1 / 5.4 / 9.1 | 9.0 / 5.6 / 9.5 | 10.6 / 7.6 / 10.3 |
| 6.1 / 5.4 / n/a | 6.4 / 5.4 / n/a | 6.6 / 5.4 / n/a | 6.9 / 5.6 / n/a | 8.8 / 7.2 / n/a |
4194304
| 11.9 / 13.0 / n/a | 12.0 / 13.1 / n/a | 12.5 / 12.9 / n/a | 13.3 / 12.8 / n/a | 13.2 / 13.0 / n/a |
| 7.0 / 6.4 / 9.5 | 8.0 / 6.4 / 9.7 | 9.2 / 6.4 / 10.1 | 10.1 / 6.5 / 10.5 | 11.6 / 8.0 / 11.1 |
| 7.1 / 6.4 / n/a | 7.3 / 6.4 / n/a | 7.6 / 6.4 / n/a | 8.0 / 6.5 / n/a | 9.9 / 7.7 / n/a |
8388608
| n/a / n/a / n/a | n/a / n/a / n/a | 13.7 / 14.1 / n/a | 14.5 / 13.8 / n/a | 14.4 / 13.9 / n/a |
| 8.0 / 7.4 / 10.5 | 9.0 / 7.4 / 10.7 | 10.2 / 7.4 / 11.1 | 11.1 / 7.5 / 11.5 | 12.6 / 8.5 / 12.0 |
| 8.1 / 7.4 / n/a | 8.4 / 7.4 / n/a | 8.6 / 7.4 / n/a | 9.1 / 7.5 / n/a | 10.8 / 8.3 / n/a |
16777216
| n/a / n/a / n/a | n/a / n/a / n/a | n/a / n/a / n/a | n/a / n/a / n/a | n/a / n/a / n/a |
| 9.0 / 8.4 / 11.6 | 10.0 / 8.4 / 11.7 | 11.2 / 8.4 / 12.1 | 12.2 / 8.4 / 12.5 | 13.6 / 9.1 / 12.9 |
| 9.1 / 8.4 / n/a | 9.3 / 8.4 / n/a | 9.6 / 8.4 / n/a | 10.1 / 8.4 / n/a | 11.9 / 9.0 / n/a |
public class PriorityQueue<TK, TV>
{
private readonly SortedDictionary<TK, Queue<TV>> _D = new SortedDictionary<TK, Queue<TV>> ();
public void Enqueue (TK key, TV value)
{
Queue<TV> list;
if (!_D.TryGetValue (key, out list)) {
list = new Queue<TV> ();
_D.Add (key, list);
}
list.Enqueue (value);
Count++;
}
public int Count
{
get;
private set;
}
public TV Dequeue ()
{
var first = _D.First ();
var item = first.Value.Dequeue ();
if (!first.Value.Any ()) {
_D.Remove (first.Key);
}
return item;
}
public IEnumerable<TV> Values
{
get
{
var keys = _D.Keys.ToArray ();
foreach (var key in keys) {
foreach (var item in _D[key]) {
yield return item;
}
}
}
}
}
关于c# - 我应该将Power Collection的OrderedMultiDictionary用作优先级队列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15684056/
Power Pivot、Power Query 和 Power BI 之间有什么区别?应该如何决定应该使用哪种工具以及何时使用。 最佳答案 电源查询 Power Query 是一种自助式 ETL(提取
在 Microsoft Power Automate 中,使用表达式 utcNow() 可以获得当前日期(和时间)。我正在尝试获取昨天的日期。我尝试了 dateadd(utcNow(), -1) 和类
也许这是一个非常简单的问题,但我试图弄清楚如何做到这一点,因为我有数百列以及手动完成的想法,将它们分成单独的查询然后 append 它们似乎并不非常实用。 我一直在处理一个查询,它以以下格式返回值:
我使用 Power Automate Desktop 创建了一个桌面流程。但我无法安排或让它自动运行。有什么办法吗? 我不希望使用云流和使用网关连接桌面流。我需要在我的台式机本身内自动运行桌面流程。有
我有一个数据集,它在 SQL Server 中进行转换,然后发送到 Power BI。该报告是根据营销人员的规范制定的,因此我无法表现出色(需要漂亮)。 是否有人设置了自动导出 PBI 报告(按特定列
所以我问了一个类似的问题,但我想我应该更普遍地提出这个问题,以获得尽可能多的想法。 我有 Power BI Pro。我的任务是为数百个收件人创建报告,每个报告都针对该特定用户进行个性化设置。 尽管每个
假设我正在将以下内容导入 PowerBI: Date | Quantity |---------------------|------------
我使用 Power Automate Desktop 创建了一个桌面流程。但我无法安排或让它自动运行。有什么办法吗? 我不希望使用云流和使用网关连接桌面流。我需要在我的台式机本身内自动运行桌面流程。有
我在表格中有一列,如下所示 当我使用 Replace Errors 将类型更改为 decimal(类型编号)并将其替换为 0.0 时,此列中的字符串给了我错误。 然后我旋转了专栏帖子,该专栏如下所示:
我对 Power BI 和 Power Automate 非常缺乏经验,如果这个问题有简单的答案(至少我找不到),我深表歉意。 我有一个 python 脚本,它从一些 excel 文件中获取数据,创建
将数据加载到模型后,我需要删除查询步骤。原因是隐藏消息来源,保护我们的专有技术,或者我只是对我所做的事情并不感到自豪;)。 但是当我删除 PQ 连接或更改“加载到”选项时,表格也会从数据模型中消失,并
我在表之间建立了 1 对多的关系,但是当我尝试在数据透视表中使用它时它失败了。我收到通常的黄色消息,说它可能缺乏关系。当我让它尝试检测一个时,它无法找到任何可能的东西,当我检查现有的时,我的就在那里并
我有一个带有标题列(在许多其他列中)的数据列表,并且我有一个 Power BI 参数,例如,值为“a、b、c”。我想要做的是遍历参数的值并删除以这些字符开头的所有行。 例如: Title a b c
有没有什么方法可以将 Power BI 报表部署到 Power BI 报表服务器,而无需手动复制这些文件,将它们上传到服务器,最后逐个报表更改每个报表的数据源连接信息,这在每个报表中都不实用客户网站。
我的数据源中有一个表,该表是从数据库加载的,其中包含带有日期的列。我需要从此列中获取最小值和最大值,并使用值作为参数在 Power BI 中创建另一个(计算的)表。请问我该怎么做?我尝试使用像 Sta
我正在用 Java 编写一个数学应用程序,它使用 Javascript 进行脚本/输入。我希望能够输入 x^2 并让 Java 在发送到 JavaScript 解析器之前将其替换为 pow(x,2)。
有人要求我将 Sharepoint 上的 Excel 在线电子表格中的数据提取到 Power BI 中以创建仪表板 - 没问题,对吧?好吧,“数据点”之一实际上是指示状态的单元格的填充颜色。我进行了一
在 Power Automate 中,我正在调用一个返回此 JSON 的 API: { "status":"200", "Suburbs":[ { "
我想从此页面(和类似页面)抓取数据:https://cereals.ahdb.org.uk/market-data-centre/historical-data/feed-ingredients.as
如何使用 PowerQuery 访问与 PowerQuery 关联的元数据?当将鼠标悬停在右侧“工作簿查询”列表中的查询上时,会显示此数据,显示“上次刷新”等字段。 应用程序:我有一个 Excel 工
我是一名优秀的程序员,十分优秀!