C# - 获取前10个值并乘以它们

时间:2015-05-04 11:30:39

标签: c# algorithm dictionary

我目前正在研究贝叶斯垃圾邮件过滤器,使用算法制作过滤器,但它不适用于长电子邮件,只有太多的值可以乘以它超出double的范围。我想要做到这一点,以便我只采取10或20个最重要的(垃圾邮件和火腿的最高值)并且只乘以它们。我想在内部再创建一个Dictionary,然后将值乘以它。

这就是现在的样子:

if (countsWordOccurenceSpam.ContainsKey(word.Key) && (!countsWordOccurenceOk.ContainsKey(word.Key)))
{
    int spamValue = 0;
    countsWordOccurenceSpam.TryGetValue(word.Key, out spamValue);
    totals = spamValue ;

    fprob_spam = ((double)spamValue) / ile_spam;

        sum_spam = (((weight * probability) + (totals * fprob_spam)) / (totals + weight));
        sum_ok = ((weight * probability) / (totals + weight));

        sum_spam = Math.Pow(sum_spam, word.Value);
        sum_ok = Math.Pow(sum_ok, word.Value);

        wp_spam_1 = wp_spam_1 * sum_spam;
        last_o_1 = last_o_1 * sum_ok;                       
} 

这是算法的一部分,现在我正在考虑将sum_spam中的所有值都放到一个Dictionary,将sum_ok中的所有值放到另一个值中,并使用.Take(10)来选择10个最高值并将它们全部相乘。

看起来好吗?我真的认为效率很低,有没有办法做到这一点?

0 个答案:

没有答案