Heim >Backend-Entwicklung >Python-Tutorial >Wie finde ich die nächstgelegene Zahl in einer Liste: Min() vs. Halbierungsmethode?

Wie finde ich die nächstgelegene Zahl in einer Liste: Min() vs. Halbierungsmethode?

Barbara Streisand
Barbara StreisandOriginal
2024-11-10 08:12:02892Durchsuche

How to Find the Closest Number in a List: Min() vs. Bisection Method?

Finden der nächsten Zahl in einer Liste

Bei einer gegebenen Liste unsortierter Ganzzahlen ist die Bestimmung der Zahl, die einem bestimmten Wert am nächsten kommt, eine gängige Programmierung Aufgabe. Um dies zu erreichen, gibt es mehrere Ansätze.

Verwendung der Funktion min()

Wenn die Liste nicht sortiert ist, bietet die Funktion min() eine schnelle und effiziente Lösung. Es berücksichtigt jedes Element in der Liste und gibt dasjenige mit der minimalen absoluten Differenz von der angegebenen Zahl zurück.

>>> myList = [4, 1, 88, 44, 3]
>>> myNumber = 5
>>> min(myList, key=lambda x:abs(x-myNumber))
4

Halbierungsmethode

Wenn die Liste bereits sortiert ist oder effizient sortiert werden können, ist die Halbierungsmethode ein effektiverer Ansatz. Es dauert O(log n) Zeit, wobei n die Anzahl der Elemente in der Liste ist.

def takeClosest(arr, target):
  left = 0
  right = len(arr) - 1
  while left <= right:
    mid = (left + right) // 2
    if arr[mid] == target:
      return arr[mid]
    elif arr[mid] < target:
      left = mid + 1
    else:
      right = mid - 1
  if left == 0 or arr[left-1] > target:
    return arr[left]
  return arr[left-1]

Die Zeitkomplexität des min()-Funktionsansatzes beträgt O(n), während die Zeit der Halbierungsmethode die Zeit ist Die Komplexität beträgt O(log n), was einen erheblichen Leistungsvorteil für größere Listen bietet.

Das obige ist der detaillierte Inhalt vonWie finde ich die nächstgelegene Zahl in einer Liste: Min() vs. Halbierungsmethode?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn