我的同事给了我一个我认为是 NP 的具有挑战性的问题,但他不会将其作为答案。
给定一个矩阵,通过每列仅选择一个数字来确定有多少非重复数字/字母组合。为此使用蛮力(尝试所有可能的组合)是不可接受的。他想要一个公式来解决这个问题。
例如他给了我这个矩阵
1 2 2 3
2 3 3 4
3 4 4 5
4 5 5 6
一些示例结果是
1) 1 2 3 4
2) 1 2 3 5
3) 1 2 3 6
4) 1 3 2 4
5) 1 3 2 5
6) 等等...
我编写了一个 java 程序,它基本上由 4 个 for 循环组成,通过所有可能的组合(4x4x4x4=256 组合)得到我相信答案是 36 种可能的组合。但这对他来说是无法接受的。并且对于解决方案,它不能独立于一个矩阵,它必须适用于所有 nxn 矩阵。
一直在为此绞尽脑汁,我相信问题是 np(hard/complete),因为它可以在多项式时间内解决,但没有通用算法可以做......你必须强行使用它。
任何帮助/指针/参考地点将不胜感激......