该组合问题使用哪种算法

时间:2019-09-19 12:42:50

标签: algorithm combinatorics

例如,我有7个元素-A,B,C,D,F,G,H。对于每个元素,我都具有与某些其他元素(例如, AB-0,AC-3,AD-9,BC-5 ,下面列出了所有兼容性值。请记住, AB = BA 。我的问题是要使用哪种算法来组合组中的所有元素,以使它们的平均组合兼容性达到最大值。每个组至少应包含2个元素。 例如,对于给定的数据,组应为ACD,BG,FH,因为 (AC + CD + AD)/ 3 =(9 + 3 + 7)/ 3 = 6.333,BG = 8,FH = 9,这两个组具有最大的平均相容性值。

我认为可以将其表示为图形,但是出于可视化的原因,我在问题中使用了矩阵。

   A  B  C  D  F  G  H
A  *  0  3  9  6  0  2
B  0  *  5  1  2  8  0
C  3  5  *  7  1  2  2
D  9  1  7  *  0  2  3
F  6  2  1  0  *  4  9
G  0  8  2  2  4  *  7
H  2  0  2  3  9  7  *

1 个答案:

答案 0 :(得分:-1)

如果您使用的是python,请使用内置函数itertools.combinations()

  1. https://docs.python.org/2/library/itertools.html#itertools.combinations

否则,您可以使用循环实现自己的生成组合功能。递归函数。

def printCombination(arr, n, r): 
    data = [0] * r 
    combinationUtil(arr, n, r, 0, data, 0) 

def combinationUtil(arr, n, r, index, data, i): 
    if (index == r): 
        for j in range(r): 
            print(data[j], end = " ") 
        print() 
        return
    if (i >= n): 
        return
    data[index] = arr[i] 
    combinationUtil(arr, n, r, index + 1,  
                    data, i + 1) 
    combinationUtil(arr, n, r, index,  
                    data, i + 1)