- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我在 C# 中有一个整数数组,我想获得整个数组的 5%,新数组包含最频繁的相似值。例如,假设我有一个包含 100 个条目的数组,其中包括 40 个 20(15 到 25)的 sibling 。我想要的是将 20 作为最频繁的值(包括它的兄弟)检测为一个新数组,然后在新数组中检测 5 个最频繁的值。我需要在 ASP.net 网站上运行代码,因此,我需要一个快速算法。谁能帮我解决这个问题?
最佳答案
您可以构建一个简单的算法,方法是对值进行分组,按计数排序,然后获取它们直到填充所需的 5% 数组,如下所示:
// Build a set of {Value, Count} pairs using LINQ
var counts = data
.GroupBy(v => v)
.Select(g => new {
Value = g => Key
, Count = g.Count()
}).OrderByDescending(p => p.Count)
.Take(5);
编辑:
The array may be as big as 1024*1024 in size and the ranges are between 0 and 255
由于范围很小,你可以使用计数数组代替组,像这样:
int counts = new int[256];
foreach (var b in data) {
counts[b]++;
}
现在您可以运行 Quick Select Algorithm选择第五项。这是 an answer提供了 QuickSelect
的 C# 实现。
var fifth = QuickSelect(counts, 5);
var res = new List<KeyValuePair<int,int>>();
for (int i = 0 ; i != counts.Length && res.Length != 5 ; i++) {
if (counts[i] >= fifth) {
res.Add(new KeyValuePair<int,int>(i, counts[i]));
}
}
您可能想用 median-of-medians algorithm 替换快速选择算法,具有相同的线性性能,但不是随机的。
关于c# - 在数组中获取最频繁和相似值的最快方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340996/
我有一个包含值的字符串数组(duh...)。 有没有一种简单的方法可以获取出现次数最多的条目?有点像 values[37].getMostOften(); 干杯:) 最佳答案 您可以使用GroupBy
我目前正在将一款用 C#(适用于 Windows Phone)开发的游戏移植到 Java (Android)。 我们在 Java 版本中遇到了内存问题,在分析之后,似乎是由于内存中的大量 String
对于播放音频文件的 iPhone 应用程序,我正在开发一个系统来跟踪用户在他们听过的任何一集中的进度(例如,他们听 file1 的前 4:35,然后开始另一个文件,然后返回到文件 1,它从 4:35
如果您按下 UIbutton 显示 UITextView,将请求代码 Ì 再次按下 UIbutton 再次显示 UITextView :/ 最佳答案 .h 文件中只有一个 int 变量,如下所示..
我在 Application_End 上处理的项目中使用临时数据库: protected void Application_End() { if (_db != null) _db.Dispo
我是一名优秀的程序员,十分优秀!