簡體   English   中英

這兩種查找具有最高相關值的密鑰的方法有什么區別?

[英]What is the difference between these two methods of finding the Key with associated highest Value?

我正在審查某人編寫的一些代碼,並且難以理解他們為什么要以這種方式找到最大值的鍵。 有人可以解釋一下,讓我知道哪個更“好”嗎? (如果有)

僅供參考,這已在模態值計算中使用。

原始方法(我不太了解第二個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;

我主要擔心的是,我只是不了解他們在做什么,我想學習。 我了解我的方式在代碼長度方面至少更為簡潔。 我知道並不一定會使它“更好”。 有人可以幫忙解釋一下嗎?

我正在審查某人編寫的一些代碼,並且難以理解他們為什么要以這種方式找到最大值的鍵。

您可以考慮問那個人。

有人可以解釋一下,讓我知道哪個更“好”嗎? (如果有)

為什么“快速剔除”更好? 首先,我們甚至都不知道任何一段代碼都是正確的 其次,除了速度以外,還有許多衡量指標是否更好的指標。

第三,如果您想知道兩件事中哪一個更快,請同時使用秒表運行它們 ,然后您就會知道。

第四,更快是無關緊要的。 相關的問題是它們是否太慢

有人可以幫忙解釋一下嗎?

我的建議是遍歷調試器中您不理解的代碼。 可以幫助您了解其工作原理。

另一個好的建議是考慮如何解決計算機領域之外的問題。 在這里,我有一百萬張卡片,上面各有一個數字,大小不限。 我要拿其中一千張卡片,將它們洗牌,然后請您找到最大的一張。 您將如何解決該問題? 您是否可以通過對千張卡片進行完全排序然后取最高的卡片來解決呢? 還是有更快的方法呢? 如果您能找到一種更快的方法來排序一千張卡片上的最大數字,而不是對它們進行排序,那么您可以了解第一種算法的工作原理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM