0

私が見ていないこの意思決定構造を単純化する方法はありますか? 正しい順序を決定するには、各ステートメントが必要であるように私には思えます。どんな洞察も大歓迎です。

def main():
    again = 'y'
    while again == 'y' or again == 'Y':
        str_1 = input('Enter string 1: ')
        str_2 = input('Enter string 2: ')
        str_3 = input('Enter string 3: ')
        first = min(str_1, str_2, str_3)
        print(first)
        again = input('Another? ')

def min(str1, str2, str3):
    # str1 < str2 < str3
    if str1 < str2 and str2 < str3:
        low = str1

    # str1 < str3 < str2   
    elif str1 < str3 and str3 < str2:
        low = str1

    # str2 < str1 < str3
    elif str2 < str1 and str1 < str3:
        low = str2

    # str2 < str3 < str1
    elif str2 < str3 and str3 < str1:
        low = str2

    # str3 < str1 < str2
    elif str3 < str1 and str1 < str2:
        low = str3

    # str3 < str2 < str1
    elif str3 < str2 and str2 < str1:
        low = str3

    return low

main()
4

4 に答える 4

0

最小限のツリーを探している場合、役に立たないテストがたくさんあります...たとえば

if str1 <= str2:
    if str1 <= str3:
        low = str1
    else:
        low = str3
else:
    if str2 <= str3:
        low = str2
    else:
        low = str3

つまり、最小値を決定するために必要な比較操作は 2 つだけです (順序付けが 6 つあるのに対し、可能な最小値は 3 つしかないため、2 ビットの情報で十分です)。つまり、ある要素が他の要素よりも小さいことがわかっている場合、他の 2 つの要素間の相対的な順序は気にしません。

あなたのフォームでも、必要なケースは少なくなります。

if str1 <= str2 and str1 <= str3:
    low = str1
elif str2 <= str1 and str2 <= str3:
    low = str2
else:
    low = str3

ただし、使用される典型的な形式 (要素の数を増やすとスケーリングが向上します) は次のとおりです。

low = x1
if x2 < low: low = x2
if x3 < low: low = x3
...
if xN < low: low = xN
于 2013-05-17T07:29:55.597 に答える