{"id":2374,"date":"2019-12-08T23:26:56","date_gmt":"2019-12-08T20:26:56","guid":{"rendered":"http:\/\/demensdeum.com\/blog\/?p=2374"},"modified":"2024-12-16T22:32:32","modified_gmt":"2024-12-16T19:32:32","slug":"binary-search","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2019\/12\/08\/binary-search\/","title":{"rendered":"Bin\u00e4re Suche"},"content":{"rendered":"<p>Angenommen, wir m\u00fcssen herausfinden, ob die E-Mail-Adresse \u201e<a href=\"mailto:demensdeum@gmail.com\">demensdeum@gmail.com<\/a>\u201c in der Liste der zul\u00e4ssigen E-Mail-Adressen f\u00fcr den Empfang von Briefen enthalten ist .<\/p>\n<p>Lassen Sie uns die gesamte Liste vom ersten bis zum letzten Element durchgehen und pr\u00fcfen, ob das Element mit der angegebenen Adresse \u00fcbereinstimmt &#8211; Lassen Sie uns einen linearen Suchalgorithmus implementieren. Aber das wird lange dauern, oder nicht?<\/p>\n<p>Um diese Frage zu beantworten, verwenden Sie die \u201eZeitkomplexit\u00e4t von Algorithmen\u201c, \u201eO\u201c-Notation. Die Betriebszeit der linearen Suche entspricht im schlimmsten Fall der n-ten Anzahl von Array-Elementen. Schreiben wir dies in \u201eO\u201c-Notation &#8211; An). Als n\u00e4chstes m\u00fcssen wir erkl\u00e4ren, dass es f\u00fcr jeden bekannten Algorithmus drei Leistungsindikatoren gibt: Best-Case-, Worst-Case- und Average-Case-Ausf\u00fchrungszeiten. Befindet sich beispielsweise die E-Mail-Adresse \u201e<a href=\"mailto:demensdeum@gmail.com\">demensdeum@gmail.com<\/a>\u201c im ersten Index des Arrays, wird sie im ersten Schritt von gefunden F\u00fcr den Algorithmus folgt daraus, dass die Ausf\u00fchrungszeit bestenfalls &#8211; O(1); und wenn am Ende der Liste, dann ist dies der schlimmste Fall &#8211; O(n)<\/p>\n<p><a href=\"http:\/\/www.peakpx.com\/485573\/yellow-and-black-road-sign\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-2387\" src=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/12\/roadSign-1.jpg\" alt=\"\" width=\"320\" height=\"240\" srcset=\"https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/12\/roadSign-1.jpg 320w, https:\/\/demensdeum.com\/blog\/wp-content\/uploads\/2019\/12\/roadSign-1-300x225.jpg 300w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/a><\/p>\n<p>Aber was ist mit den Details der Software-Implementierung und der Hardware-Leistung? Sie sollten einen gro\u00dfen Einfluss auf das O haben? Atmen Sie nun ein und stellen Sie sich vor, dass die Berechnung der Zeitkomplexit\u00e4t f\u00fcr eine abstrakte ideale Maschine berechnet wird, in der es nur diesen Algorithmus und sonst nichts gibt.<\/p>\n<h3>Algorithmus<\/h3>\n<p>Okay, es stellt sich heraus, dass die lineare Suche ziemlich langsam ist. Versuchen wir es mit der bin\u00e4ren Suche. Zun\u00e4chst sollte klargestellt werden, dass wir nicht mit Bin\u00e4rdaten arbeiten; dieser Name wurde dieser Methode aufgrund der Besonderheiten ihrer Arbeit gegeben. Zun\u00e4chst sortieren wir das Array nach <a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%9B%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1% 80 %D0 % B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BF%D0%BE%D1%80%D1%8F% D0%B4%D0%BE%D0%BA\" target=\"_blank\" rel=\"noopener\">lexikografische Reihenfolge<\/a>, dann nimmt der Algorithmus den Bereich des gesamten Arrays, ruft das mittlere Element des Bereichs ab und vergleicht es <a href=\"https:\/\/ru.stackoverflow.com\/questions\/489888\/%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5 -% D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1% 87%D0%B5%D1%81%D0%BA%D0%BE%D0 %B5-%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D1%87% D1%82%D0%BE-%D0%BE%D0%BD%D0%BE- %D1%81%D0%BE%D0%B1%D0%BE%D0%B9-%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0% D0%B2%D0%BB%D1%8F%D0%B5%D1%82\" target=\"_blank\" rel=\"noopener\">lexikographisch<\/a> und abh\u00e4ngig vom Ergebnis des Vergleichs entscheidet, welcher Bereich f\u00fcr die weitere Suche verwendet werden soll &#8211; die obere H\u00e4lfte des Stroms oder die untere. Das hei\u00dft, bei jedem Suchschritt wird eine Entscheidung aus zwei m\u00f6glichen &#8211; Bin\u00e4re Logik. Dieser Schritt wird wiederholt, bis entweder das Wort gefunden wird oder nicht (der Schnittpunkt des unteren und oberen Index des Bereichs tritt auf).<\/p>\n<p>Leistung dieses Algorithmus &#8211; Der beste Fall ist, wenn ein Element sofort in der Mitte des Arrays O(1) gefunden wird, der schlechteste Fall der Aufz\u00e4hlung ist O(log n)<\/p>\n<h3>Fallstricke<\/h3>\n<p>Bei der Implementierung der bin\u00e4ren Suche bin ich nicht nur auf das interessante Problem der <b>fehlenden Standardisierung des lexikografischen Vergleichs<\/b> in Programmiersprachenbibliotheken gesto\u00dfen, sondern habe sogar festgestellt, dass es keinen <b>einheitlichen Standard f\u00fcr die Implementierung gibt localeCompare innerhalb von JavaScript<\/b>. Der ECMAScript-Standard erlaubt unterschiedliche Implementierungen dieser Funktion, weshalb beim Sortieren mit localeCompare auf verschiedenen JavaScript-Engines v\u00f6llig unterschiedliche Ergebnisse beobachtet werden k\u00f6nnen.<\/p>\n<p>Damit der Algorithmus korrekt funktioniert, ist es notwendig, <b>nur denselben lexikografischen Vergleichsalgorithmus zu sortieren und zu verwenden<\/b>, andernfalls funktioniert nichts. Co-aber wenn Sie beispielsweise versuchen, ein Array in Scala zu sortieren und mit NodeJS zu suchen, ohne Ihre eigene Sortierung\/Sortierung einer Implementierung zu implementieren, dann erwartet Sie nichts au\u00dfer Entt\u00e4uschung \u00fcber die Menschheit.<\/p>\n<h3>Quellen<\/h3>\n<p><a href=\"https:\/\/ru.stackoverflow.com\/questions\/489888\/%D0%A7%D1%82%D0%BE-%D1%82%D0%B0%D0%BA%D0%BE%D0%B5 -% D0%BB%D0%B5%D0%BA%D1%81%D0%B8%D0%BA%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D1% 87%D0%B5%D1%81%D0%BA%D0%BE%D0 %B5-%D1%81%D1%80%D0%B0%D0%B2%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B8-%D1%87% D1%82%D0%BE-%D0%BE%D0%BD%D0%BE- %D1%81%D0%BE%D0%B1%D0%BE%D0%B9-%D0%BF%D1%80%D0%B5%D0%B4%D1%81%D1%82%D0%B0% D0%B2%D0%BB%D1%8F%D0%B5%D1%82\" target=\"_blank\" rel=\"noopener\">Was ist ein lexikografischer Vergleich und was stellt er dar?<\/a><br \/><a href=\"https:\/\/ru.stackoverflow.com\/questions\/794557\/%D0%9F%D0%BE%D1%87%D0%B5%D0%BC%D1%83-%D0%B4%D0%BB%D1%8F-%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F-%D1%81%D0%BB%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8-%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D0%BE%D0%B2-%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D1%83%D0%B5%D1%82%D1%81%D1%8F-log-n-%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE-lb-n\" target=\"_blank\" rel=\"noopener\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f log N \u0432\u043c\u0435\u0441\u0442\u043e lb N?<\/a><br \/>\n<a href=\"https:\/\/ru.wikipedia.org\/wiki\/%D0%94%D0%B2%D0%BE%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%B8%D1%81%D0%BA\" target=\"_blank\" rel=\"noopener\">\u0414\u0432\u043e\u0438\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a<\/a><br \/>\n<a href=\"https:\/\/habr.com\/ru\/post\/188010\/\" target=\"_blank\" rel=\"noopener\">\u0417\u043d\u0430\u0439 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432<\/a><br \/>\n<a href=\"https:\/\/stackoverflow.com\/questions\/52941016\/sorting-in-localecompare-in-javascript\" target=\"_blank\" rel=\"noopener\">https:\/\/stackoverflow.com\/questions\/52941016\/sorting-in-localecompare-in-javascript<\/a><\/p>\n<h3>Quellcode<\/h3>\n<p><a href=\"https:\/\/gitlab.com\/demensdeum\/algorithms\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/algorithms<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Angenommen, wir m\u00fcssen herausfinden, ob die E-Mail-Adresse \u201edemensdeum@gmail.com\u201c in der Liste der zul\u00e4ssigen E-Mail-Adressen f\u00fcr den Empfang von Briefen enthalten ist . Lassen Sie uns die gesamte Liste vom ersten bis zum letzten Element durchgehen und pr\u00fcfen, ob das Element mit der angegebenen Adresse \u00fcbereinstimmt &#8211; Lassen Sie uns einen linearen Suchalgorithmus implementieren. Aber das<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2019\/12\/08\/binary-search\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Bin\u00e4re Suche&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[131,132],"class_list":["post-2374","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-algorithms","tag-binary-search","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2374","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=2374"}],"version-history":[{"count":19,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2374\/revisions"}],"predecessor-version":[{"id":3931,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/2374\/revisions\/3931"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=2374"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=2374"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=2374"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}