나는 내가 생각해내는 무차별 대항력 방법 대신에 아래의 문제 집합에 더 좋은 알고리즘이 있는지 알아 내려고합니다. 초기 루프가 n ** n 인 것을 감안할 때 이것은 매우 빨리 넘어집니다.순위 알고리즘 기준을 결정하는 방법
알고리즘의 요지는 순위가 지정된 항목과 관련된 데이터 집합입니다. 이것으로부터 순위 기준을 제시하기 위해 어떤 기준이 사용되었는지 결정해야합니다. 예를 들어 순위가 Ben, Sam, Hal 인 경우 기준은 GPA입니다. 이 선형 방식으로이 작업을 쉽게 할 수 있어야하므로
criteria = ['Height', 'Weight', 'GPA']
candidates = {'Ben': (72,205,4.0),'Sam': (65,220,3.8),'Hal': (74,210,3.6)}
def base10toN(num, base):
converted_string, modstring = "", ""
currentnum = num
while currentnum:
mod = currentnum % base
currentnum = currentnum // base
converted_string = chr(48 + mod + 7*(mod > 10)) + converted_string
return converted_string
def get_relevant_criteria(criteria, candidates, ranking):
l = len(criteria)
max_score = 0
max_criteria =()
for x in xrange(1,l**l):
pattern = str(base10toN(x,l)).rjust(3,'0')
prev_score = 0
isvalid = True
for candidate in ranking[::-1]:
new_score = score_criteria(pattern, candidates[candidate])
if new_score < prev_score:
isvalid = False
break
prev_score = new_score
if isvalid:
return [criteria[x] + " (x"+pattern[x]+")" for x in xrange(0,len(pattern)) if pattern[x] != '0']
return None
def score_criteria(pattern, values):
score = 0
for x in xrange(0,len(pattern)):
score += int(pattern[x]) * values[x]
return score
print get_relevant_criteria(criteria, candidates, ('Ben', 'Sam', 'Hal')) # GPA
print get_relevant_criteria(criteria, candidates, ('Sam', 'Hal', 'Ben')) # Weight
print get_relevant_criteria(criteria, candidates, ('Hal', 'Ben', 'Sam')) # Height
Ben이 평균 평점이 가장 높고, 가장 높고 가장 무겁고, Sam의 평점이 가장 낮고가 장 짧고 가벼운 경우를 생각해보십시오. 순위를 매기는 데 사용 된 것을 알 수있는 방법이 없습니다. –
필자는이 세부 사항을 설명하면서 작성한 훨씬 강력한 응용 프로그램을 가지고 있지만 가능한 한 간단하게 질문의 정신을 유지하려고했습니다. 가장 중요한 질문은 정확하게 점수를 매기려면 n ** n의 모든 단일 조합을 실제로 평가해야합니까? –