2016-03-30 18 views
-5

Bazı alt öğeler vardır (a, b, c, d, e diyelim) ve bunların alt kümeleri arasındaki göreli uzaklıklar bilinir. Alt kümelerin boyutu sınırlıdır, ancak puanları olan tüm öğelerin son sıralamasını almak istiyorum. Örnek olarak:Bilinen çifte mesafelere sahip öğeler sipariş etme

a,b,c 
1,3,5 

c,d,e 
4,1,10 

gerçek uygulama biraz daha büyük olacak

a,d,b,c,e 

gibi bir şey gidildiği takdirde bu yüzden bir algoritma bulmaya çalışıyorum (5 öğe her yaklaşık 5.000 alt kümeleri) o Bunu verimli bir şekilde yapabilir. Böyle bir sorunu çözmek için bilinen herhangi bir çözüm var mı (kod gerektirmez, kavramsal bir fikir daha sonra yararlı olur)?

+0

Aşağıya doğru sorularınız var çünkü sorunuz sadece sizin için kodu yazmamızı ister. Neyi denediğinizi, nerede başarısız olduğunu vb. Dahil etmelisiniz. Lütfen bkz. [Sor]. – Lafexlos

+0

Veri türünüz nedir? şu ana kadar ne denedin? – styvane

cevap

1

(haklı) aşağıdaki ile gelen bir çözelti değil posta downvoted sonra:

sets = [ 
    [["a", 1], ["b", 5], ["c", 9]], 
    [["c", 3], ["d", 1], ["e", 5]] 
] 
pairs = {} 
for set in sets: 
    processed_pairs = [] 
    for first in set: 
     for second in set: 
      if first[0] is second[0]: 
       continue 

      pair = first[0]+second[0] 
      if pair in processed_pairs: 
       continue 
      processed_pairs.append(pair) 
      if second[0] not in pairs: 
       pairs[second[0]] = {} 
      if first[0] not in pairs[second[0]]: 
       pairs[second[0]][first[0]] = {} 
      pairs[second[0]][first[0]] = second[1]/first[1] 
pairs 

bu çiftler halinde Sonuç:

{'a': 1, 'b': 5.0, 'c': 9.0, 'd': 3.0, 'e': 15.0} 
:

{'a': {'b': 0.2, 'c': 0.1111111111111111}, 
'b': {'a': 5.0, 'c': 0.5555555555555556}, 
'c': {'a': 9.0, 'b': 1.8, 'd': 3.0, 'e': 0.6}, 
'd': {'c': 0.3333333333333333, 'e': 0.2}, 
'e': {'c': 1.6666666666666667, 'd': 5.0}} 

values = {"a": 1} 
for i in ['b', 'c', 'd', 'e']: 
    for letter in pairs[i]: 
     if letter in values: 
      values[i] = values[letter]*pairs[i][letter] 
values 

sonuçlanan

Bu en güzel, ancak kabul edilebilir değil.

İlgili konular