BruteForce 暴力枚举

问题

排列ssnn个元素[x0,x1,,xn1][x_0,x_1, \dots ,x_{n-1}],每个元素可以选取[1,2,,m][1, 2, \dots, m]mm个值。

例如n=3,m=2n = 3, m = 2的排列ss有以下情况:

[1,1,1][2,1,1][1,2,1][1,1,2][2,2,1][2,1,2][1,2,2][2,2,2]\begin{matrix} [1,1,1] \\ [2,1,1] \\ [1,2,1] \\ [1,1,2] \\ [2,2,1] \\ [2,1,2] \\ [1,2,2] \\ [2,2,2] \end{matrix}

给定n,mn, m的值,用Brute Force求排列ss的所有情况。

解法

根据乘法原理可以看出,排列ss生成每种情况都可以看作一件nn步才能完成的工作,其中每一步都是每个元素的选择过程。第ii步的完成有mm个方法,那么共有nmn^m种方法可以完成该工作。

通过遍历求出所有情况,例如对于排列s=[x0,x1,x2,x3]s = [x_0,x_1,x_2,x_3],每个元素的范围是[1,5][1,5]。需要对44个元素枚举所有55种情况,即可求出排列ss的所有可能。对nn个元素,每个有mm个值的排列ss,遍历所有情况的时间复杂度O(nm)O(n^m)

源码

BruteForce.h

BruteForce.cpp

测试

BruteForceTest.cpp

Last updated