【问题标题】:Stat issue - comparing list against itself统计问题 - 将列表与自身进行比较
【发布时间】:2016-08-31 13:18:22
【问题描述】:

这是给你 CompSci 或统计人员的。你能告诉我,如果 theList 包含 72,786 个“事物”,那么在循环结束时 compareCount 的值是多少?我想它是 72,786^2-1,但这个老大脑已经很久没有这样工作了。非常感谢您的时间和帮助!

List<thing> theList = new List<thing>();//list contains 73,786 "things"
    private void compare()
    {
        int compareCount = 0;
        for(int i = 0; i < theList.Count-1; i++)
        {
            for(int comp = i + 1; comp < theList.Count; comp++)
            {
                compare(theList[i], theList[comp]);
                compareCount++;
            }
        }

    }

【问题讨论】:

  • 你为什么不运行它来找出答案?
  • 我是 - 我正在尝试根据目前发生的情况确定何时完成以及我可能会遇到哪些内存问题。如果 list.Count^2-1 是正确的,我大约完成了 2%。如果这是正确的数字,那么在 99% 的 CPU 负载下,我的 ETC 略少于 30 天。
  • 如果这只是一道数学题,那么它不属于 Stack Overflow。你应该把它发到math stack exchange
  • 打算作为一个可能的双部分,但在我知道第一部分之前询问第二部分是没有意义的。

标签: c# statistics computer-science


【解决方案1】:

您代码中的 compareCount 将具有值 (72786^2 - 72786) / 2 = 2648864505。我已经通过运行它确认了这一点。正如现在所写的那样,没有必要在内部循环中调用compare(theList[i], theList[comp])(因为它不会以任何方式影响计数)。

这就是我对(n^2 - n)/2 公式的记忆:与n 玩家进行循环赛,每个人都与所有其他玩家恰好相遇一次。

匹配计划是具有n 行和列的正方形(n * n = n^2 组合)。由于玩家不与自己比赛,因此必须减去从左上角到右下角的对角线上的 n 匹配项(n^2 - nmatches 现在离开)。对角线上方三角形中玩家A与玩家B的配对与下方三角形中BA的配对相同(此类配对有(n^2 - n)/2)。从n^2 - n 中减去这个数字会得到(n^2 - n)/2 可能匹配的最终结果。

【讨论】:

  • 非常感谢!我是个笨蛋,因为我没想过在没有实际比较的情况下运行它(这需要所有时间)。非常感谢!
  • 我正在将结果转储到文件中,并且我只在文件名中占了五个数字,这意味着在完成之前我会在文件名上抛出一个异常。我已经 3 天了,但现在重新开始比两周内做要好得多。再次感谢您的帮助!
  • @ShannonHolsinger 没关系 :) 顺便说一句,下次对 compareCount 使用 uint 或 long,因为 int 会溢出。
  • 只是想让您知道 - 感谢您的帮助,我意识到我不仅需要停止/重建/重新启动,还需要减少采样大小以获得真实的运行时间。我已经减少到 16.1 亿个组合,并且有足够的空间来保存它们。你为我节省了几天浪费的时间。
  • 很高兴,我可以帮助你:)
猜你喜欢
  • 1970-01-01
  • 2023-03-15
  • 2013-01-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-25
  • 2021-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多