【问题标题】:Reducing permutations of many nested loops减少许多嵌套循环的排列
【发布时间】:2010-06-17 09:56:20
【问题描述】:

我决定做一张图片来更好地解释这一点,我只是想检查一下我的想法是否正常,并且我可以将总排列减少 75%:

alt text http://www.freeimagehosting.net/uploads/45e5c6b05e.gif

【问题讨论】:

    标签: optimization loops combinatorics nested-loops permutation


    【解决方案1】:

    您正在减少排列的数量,但没有减少 75%,因为小正方形的所有可能位置都填充了 6x6 正方形,而您的“四分之一”填充了 4x4 正方形。

    由于您的宿舍存在“重叠”,您实际上是在添加一些排列。 由于您的四分之一是 4x4,因此中间列有 4 个重叠的正方形,中间行有另外 4 个。

    不过,这比实际计算每个小方块要少。

    此外,您可以通过执行以下操作进一步提高 2 个方格的性能:

    假设您有 2 个正方形,1 和 2。如果您的正方形是:

    11110000

    11110000

    00000000

    02000000

    这将等同于:

    00001111

    00001111

    00000000

    00000020

    00000020

    00000000

    00001111

    00001111

    因此,您可以循环遍历网格第一季度中 1 的所有排列,而不是网格前半部分(左)中 2 的所有排列。对第 1 季和第 2 季执行此操作(其中第 1 季在左上角,第 2 季在右上角)。

    【讨论】:

    • 感谢您的回复。我做了一些测试: 1,680 次迭代中的 576 次迭代(原始大小的 34%) 90,720 次迭代中的 31,104 次迭代(原始大小的 34%) 对于不同数量的正方形/画布大小,因此这是一个成功的优化,将排列减少到每个原始大小的 34%时间太棒了!无论如何,是否可以对多个正方形进行进一步的“镜像”优化?使用 2 个方格,您可以减少第一个方格的循环,然后使用第 2 个方格循环所有位置,如果您有 3 个方格,有什么方法可以优化它?
    • 见我上面的编辑。我之前的评论很粗略,所以我删除了它,但基本上,执行上述操作(第 1 季度 x 第 1 半,第 2 季度 x 上半),但对于每一步,循环也与第 3 方的每个排列一起循环。
    猜你喜欢
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 1970-01-01
    相关资源
    最近更新 更多