0

だから私は二分法で用語を検索するプログラムに取り組んでいます。それは無限ループを作り、理由はわかりませんが、どこにあるかは知っています( elif/else 内)。だからここに私のコードがあります:

def RechercheDichotomique(liste,x):# Algo pour recherche dichotomique

DebutListe=0
FinListe=len(liste)

while (FinListe-DebutListe)>1:# On ne cherche que si la liste a au moins un terme dedans

    ElementCentral=int(len(liste[DebutListe:FinListe])/2)# On prend l'element central de la liste
    liste[DebutListe:FinListe]

    if liste[ElementCentral]==x:# Si l'element central est x correspondent on renvoie True
        return (True)

    elif liste[ElementCentral]<x:# Si l'element central est inferieur a x alors on prend la moitie superieure
        DebutListe=ElementCentral
        FinListe=len(liste)

    else:# Sinon on prend la partie inferieure de la liste
        DebutListe=0
        FinListe=int((FinListe)/2)

if FinListe-DebutListe==1 and liste[ElementCentral]==x:# On verifie qu'il ne reste qu'un terme dans la liste et que le seul qui reste est bien x
    return (True)

もっと簡単に行う方法がたくさんあることは知っていますが、リストをそのままにしておく必要があります。ありがとうございます!

4

1 に答える 1

0

コードに次の行があります。

liste[DebutListe:FinListe]

結果は保存されないため、何もしません。機能させたい場合は、これを再割り当てする必要があります。

liste = liste[DebutListe:FinListe]

以下は、Python のスタイル ガイドにより厳密に準拠したバイナリ検索の実装です。

def binary_search(collection, x):
    while collection:
        center = len(collection) / 2

        if collection[center] == x:
            return True
        elif collection[center] < x:
            collection = collection[center + 1:]
        else:
            collection = collection[:center]
    else:
        return False
于 2014-12-19T21:27:53.613 に答える