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

Barbara Streisand
Freigeben: 2024-11-10 08:12:02
Original
828 Leute haben es durchsucht

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
Nach dem Login kopieren

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]
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage