查找具有相关最大值的键的这两种方法的区别是什么?

本文关键字:方法 两种 区别 是什么 最大值 查找 | 更新日期: 2023-09-27 18:12:25

我正在审查某人编写的一些代码,并且很难理解为什么他们以这种方式找到最大值的键。谁能解释一下,让我知道哪个"更好",也就是更快?(如果有的话)

供参考,这被用于模态值计算。

原始方法(我不完全理解第二个foreach循环):

// Begin Calculating the Modal Value
Dictionary<double, double> counts = new Dictionary<double, double>();
foreach (double cond_value in condDataToDouble)
{
    if (counts.ContainsKey(cond_value))
    {
        counts[cond_value] = counts[cond_value] + 1;
    }
    else
    {
        counts[cond_value] = 1;
    }
}
sourceMode = double.MinValue;
double maxVal = double.MinValue;
// Get the Max (modal) Value:
foreach (double key in counts.Keys)
{
    if (counts[key] > maxVal)
    {
        maxVal = counts[key];
        sourceMode = key;
    }
}

我的方法:

// Begin Calculating the Modal Value
Dictionary<double, double> counts = new Dictionary<double, double>();
foreach (double cond_value in condDataToDouble)
{
    if (counts.ContainsKey(cond_value))
    {
        counts[cond_value] = counts[cond_value] + 1;
    }
    else
    {
        counts[cond_value] = 1;
    }
}
// Get the Max (modal) Value:
sourceMode = counts.OrderByDescending(x => x.Value).First().Key;

我主要担心的是我不明白他们在做什么,我想学习。我知道我的方法至少在代码长度方面更简洁。我知道这并不一定会让它变得"更好"。有人能帮我解释一下吗?

查找具有相关最大值的键的这两种方法的区别是什么?

我正在检查某人写的一些代码,我很难理解为什么他们要用这种方式找到最大值的键。

你可以考虑问问那个人。

谁能解释一下,让我知道哪个"更好",也就是更快?(如果有的话)

为什么"更快"等同于"更好"?首先,我们甚至不知道这两段代码是否正确。其次,除了速度之外,还有许多衡量更好的指标。

第三,如果你想知道两个事物中哪一个更快,在秒表指向的情况下同时运行它们,然后你就知道了。

第四,哪个更快是不相关的;相关的问题是它们中的任何一个都太慢了吗?

有人能帮我解释一下吗?

我的建议是在调试器中运行你不理解的代码;这将帮助你理解它是如何工作的。

另一个好建议是考虑如何在计算机领域之外解决问题。这里,我有一百万张卡片,每张卡片上都有一个数字,大小不一。我要拿出1000张这样的牌,洗牌,然后让你们找出最大的一张。你会如何解决这个问题?你会把这一千张牌完全排序然后取最高的那张来解它吗?或者有没有更快的方法?如果你能找到一种比排序更快的方法来找到一千张卡片上最大的数字,你就能理解第一个算法是如何工作的。