【发布时间】:2011-11-07 17:21:11
【问题描述】:
我只是想知道该计算的最佳方法是什么。假设我有一个输入值数组和边界数组 - 我想计算/分桶边界数组中每个段的频率分布。
使用桶搜索是个好主意吗?
其实我发现了那个问题Calculating frequency distribution of a collection with .Net/C#
但我不明白如何为此目的使用存储桶,因为每个存储桶的大小在我的情况下可能不同。
编辑: 在所有讨论之后,我有内/外循环解决方案,但我仍然想用字典消除内循环以在这种情况下获得 O(n) 性能,如果我理解正确,我需要将输入值散列到存储桶索引中。所以我们需要某种复杂度为 O(1) 的散列函数?有什么想法吗?
【问题讨论】:
-
你能更好地描述边界数组吗?各种边界之间是否有任何关系(即它们是连续的)还是它们的大小和“位置”完全随机?我假设边界数组完全覆盖了可能值的范围 - 这是真的吗?另外,我假设没有重叠 - 对吧?
-
最快是大“O”的意思还是小代码的意思?一种简单的方法是自己编写一个函数 Func
并将其与 Linqs .GroupBy 一起使用以将其分组为“Buckets” - 但可能有更快的计算方法来执行此操作。 -
是的,你是对的。边界值的值单调递增。它们没有重叠,并且涵盖了可能值的范围。例如:0、10、50、100、120。
-
在大“O”的意思中最快,没有 Linqs 。 GroupBy,只是计算方式。
-
一个简单但不太快的解决方案是二分搜索。
标签: c# algorithm design-patterns data-structures frequency-distribution