[PYTHON] In 100 Tagen sind Sie Ingenieur. ――Tag 61 ――Programmieren ――Über Erkundung

Klicken Sie hier bis gestern

Sie werden in 100 Tagen Ingenieur - Tag 59 - Programmierung - Über Algorithmen

Sie werden in 100 Tagen Ingenieur --- Tag 53 - Git - Über Git

Sie werden in 100 Tagen Ingenieur - Tag 42 - Cloud - Über Cloud-Dienste

Sie werden in 100 Tagen Ingenieur - Tag 36 - Datenbank - Über die Datenbank

Sie werden Ingenieur in 100-Tage-24-Python-Grundlagen der Python-Sprache 1

Sie werden in 100 Tagen Ingenieur - Tag 18 - JavaScript - Grundlagen von JavaScript 1

Sie werden in 100 Tagen Ingenieur - 14. Tag - CSS - CSS-Grundlagen 1

Sie werden in 100 Tagen Ingenieur - Tag 6 - HTML - HTML-Grundlagen 1

Über die Erforschung

"Suchen" in der Programmierung dient dazu, die gewünschten Daten zu finden.

Es gibt verschiedene Arten von Daten und wie man nach Daten sucht.

Lineare Suche

Wenn Daten in der Liste ab dem Anfang der Liste gespeichert werden Wenn Sie bis zum Ende der Liste schauen, finden Sie die gewünschten Daten.

Eine solche Suchmethode wird "lineare Suche" genannt. Es ist einfach und leicht zu implementieren, da Sie nur die Reihenfolge überprüfen müssen.

Das folgende Beispiel ist ein einfaches lineares Suchbeispiel.

data = [6342, 4588, 2362, 6812, 6102, 5119, 2631, 3548, 4559, 3570]
target = 4559
flg = False

##Beispiel für eine lineare Suche
def linear_search(data, val):
    for x in data:
        if x == val:
            return True
    return False

print(linear_search(data, target))

True

Ich denke, es ist ein relativ leicht verständlicher Algorithmus Es wird schwierig sein, wenn mehr Daten untersucht werden müssen, bis der Wert gefunden ist.

Ich suche nach Zahlen in der Reihenfolge oben in der Liste, aber wenn sie am Ende der Liste stehen Es wird lange dauern.

Im Durchschnitt die Anzahl der Vergleiche von $ \ frac {n + 1} {2} $ Im schlimmsten Fall handelt es sich um eine $ O (n) $ -Verarbeitung.

Binäre Suche

Überlegen Sie, wie Sie schnell herausfinden können, ob die Anzahl der Daten in der Liste zunimmt "Lineare Suche" ist schwierig.

Wenn Sie sich einen bestimmten Wert wie ein Wörterbuch oder ein Telefonbuch ansehen, ist der gewünschte Wert höher Um zu beurteilen, ob es groß oder klein ist Eine Methode zum Suchen mit hoher Geschwindigkeit, indem der Vorgang des Eingrenzen des Suchbereichs auf die Hälfte wiederholt wird Es heißt "Dichotomie".

#Beispiel für Dichotomie
def binary_search(data, num):
    left , right = 0 , len(data) - 1
    while left <= right:
        m = (left + right) // 2
        if data[m] == num:
            return m
        elif data[m] < num:
            left = m + 1
        else:
            right = m - 1
    return -1

data = [6342, 4588, 2362, 6812, 6102, 5119, 2631, 3548, 4559, 3570]
data.sort()
print(data)
print(binary_search(data, 5119))

Die Daten müssen sortiert werden, um eine Dichotomie zu ermöglichen. Sortieren Sie die Daten vor der Suche.

Breitensuche

Nicht bei der Suche nach in einer Liste gespeicherten Daten Angenommen, Sie möchten die gewünschten Daten in den hierarchischen Daten finden.

Zum Beispiel aus Daten mit einer baumartigen Struktur wie einer Website Beim Finden der gewünschten Seite Zu diesem Zeitpunkt können "Suche nach Breitenpriorität" und "Suche nach Tiefenpriorität" in Betracht gezogen werden.

Breite erste Suche

So listen Sie Dinge auf, die sich in der Nähe des Ortes befinden, an dem Sie Ihre Suche starten, und überprüfen Sie die einzelnen Elemente Es heißt "Breitenprioritätssuche (BFS)".

# BFS(Suche nach Breitenpriorität)
import os
from collections import deque
 
def bfs(path):
    q = deque([])
    q.append(path)
    while len(q) > 0:
        p = q.popleft()
        print (p)
        for child in os.listdir(p):
            child_path = p + '/' + child
            if os.path.isdir(child_path):
                q.append(child_path)
    return q

print(bfs('./'))

Tiefe erste Suche

So fahren Sie mit der Suche nach "Breitenpriorität" so weit fort, wie Sie möchten, und kehren zurück, wenn Sie nicht fortfahren können Es heißt "Tiefenprioritätssuche (DFS)".

Auch als "Backtrack-Methode" bekannt.

import os
from collections import deque
 
def dfs(path):
    q = deque([]) 
    q.append(path)
    while len(q) > 0:
        p = q.pop()
        print (p)
        for child in os.listdir(p):
            child_path = p + '/' + child
            if os.path.isdir(child_path):
                q.append(child_path) 
    return q

print(dfs('./'))

Zusammenfassung

Es gibt verschiedene Datensuchmethoden Der Umfang der Berechnung und die Ausführungsgeschwindigkeit hängen stark davon ab, wie die Daten zusammengestellt und durchsucht werden.

Mit dem optimalen Datenformat entsprechend den zu verarbeitenden Daten Betrachten Sie den Explorationsalgorithmus.

39 Tage, bis Sie Ingenieur werden

Informationen zum Autor

HP von Otsu py: http://www.otupy.net/

Youtube: https://www.youtube.com/channel/UCaT7xpeq8n1G_HcJKKSOXMw

Twitter: https://twitter.com/otupython

Recommended Posts

In 100 Tagen sind Sie Ingenieur. ――Tag 61 ――Programmieren ――Über Erkundung
In 100 Tagen sind Sie Ingenieur. ――Tag 71 ――Programmieren ――Über das Schaben 2
In 100 Tagen sind Sie Ingenieur. ――Tag 74 ――Programmieren ――Über das Schaben 5
In 100 Tagen sind Sie Ingenieur. ――Tag 73 ――Programmieren ――Über das Schaben 4
In 100 Tagen sind Sie Ingenieur. ――Tag 75 ――Programmieren ――Über das Schaben 6
In 100 Tagen sind Sie Ingenieur. ――Tag 68 ――Programmieren ――Über TF-IDF
In 100 Tagen sind Sie Ingenieur. ――Tag 70 ――Programmieren ――Über das Schaben
In 100 Tagen sind Sie Ingenieur. ――Tag 81 ――Programmieren ――Über maschinelles Lernen 6
In 100 Tagen sind Sie Ingenieur. ――Tag 82 ――Programmieren ――Über maschinelles Lernen 7
In 100 Tagen sind Sie Ingenieur. ――Tag 79 ――Programmieren ――Über maschinelles Lernen 4
In 100 Tagen sind Sie Ingenieur. ――Tag 76 ――Programmieren ――Über maschinelles Lernen
In 100 Tagen sind Sie Ingenieur. ――Tag 80 ――Programmieren ――Über maschinelles Lernen 5
In 100 Tagen sind Sie Ingenieur. ――Tag 78 ――Programmieren ――Über maschinelles Lernen 3
Sie werden in 100 Tagen Ingenieur. ――Tag 84 ――Programmieren ――Über maschinelles Lernen 9
In 100 Tagen sind Sie Ingenieur. ――Tag 83 ――Programmieren ――Über maschinelles Lernen 8
In 100 Tagen sind Sie Ingenieur. ――Tag 77 ――Programmieren ――Über maschinelles Lernen 2
In 100 Tagen sind Sie Ingenieur. ――Tag 85 ――Programmieren ――Über maschinelles Lernen 10
Sie werden in 100 Tagen Ingenieur - Tag 63 - Programmierung - Wahrscheinlichkeit 1
Sie werden in 100 Tagen Ingenieur. ――Tag 65 ――Programmieren ――Über Wahrscheinlichkeit 3
Sie werden in 100 Tagen Ingenieur. ――Tag 64 ――Programmieren ――Über Wahrscheinlichkeit 2
Sie werden in 100 Tagen Ingenieur - Tag 86 - Datenbank - Über Hadoop
In 100 Tagen sind Sie Ingenieur. ――Tag 60 ――Programmieren ――Über Datenstruktur und Sortieralgorithmus
Sie werden in 100 Tagen Ingenieur - 27. Tag - Python - Python-Übung 1
Sie werden in 100 Tagen Ingenieur - Tag 34 - Python - Python-Übung 3
Sie werden in 100 Tagen Ingenieur - 31. Tag - Python - Python-Übung 2
Sie werden in 100 Tagen Ingenieur. ――Tag 67 ――Programmieren ――Über morphologische Analyse
Sie werden in 100 Tagen Ingenieur. ――Tag 66 ――Programmieren ――Über die Verarbeitung natürlicher Sprache
Sie werden in 100 Tagen Ingenieur. ――Tag 24 ―― Python ―― Grundlagen der Python-Sprache 1
Sie werden in 100 Tagen Ingenieur. ――Tag 30 ―― Python ―― Grundlagen der Python-Sprache 6
Sie werden in 100 Tagen Ingenieur. ――Tag 25 ―― Python ―― Grundlagen der Python-Sprache 2
Sie werden in 100 Tagen Ingenieur - 29. Tag - Python - Grundlagen der Python-Sprache 5
Sie werden in 100 Tagen Ingenieur - Tag 33 - Python - Grundlagen der Python-Sprache 8
Sie werden in 100 Tagen Ingenieur - 26. Tag - Python - Grundlagen der Python-Sprache 3
Sie werden in 100 Tagen Ingenieur - Tag 35 - Python - Was Sie mit Python tun können
Sie werden in 100 Tagen Ingenieur - Tag 32 - Python - Grundlagen der Python-Sprache 7
Sie werden in 100 Tagen Ingenieur - 28. Tag - Python - Grundlagen der Python-Sprache 4
Sie müssen vorsichtig mit den Befehlen sein, die Sie jeden Tag in der Produktionsumgebung verwenden.
Was Anfänger über das Programmieren im Jahr 2016 denken