Ajoutez la fonction pour renvoyer la valeur minimale (min) à la pile faite par Python, mais push / pop / min est de base O (1) !!

Bonsoir à tous En disant que mon article fait également 400 vues au total Autant que je suis heureux, merci m (_ _) m Si c'est difficile à comprendre, vous pouvez commenter (o ゚ o) non YO--

Le défi d'utiliser mes vacances d'été était également significatif Je suis malade. Aujourd'hui c'est la fin des vacances d'été Je travaillerai à partir de la semaine prochaine. Demain et après-demain, il y aura des formations comme la garde d'enfants et les travaux ménagers (rires)

Trouvez du temps si vous le pouvez Je voudrais continuer cette activité, alors veuillez me soutenir.

Au fait, O (1)!? Je ne sais pas quoi expliquer à partir de là Je vais l'omettre car il sera chauve (rires)

Si vous regardez l'article d'un expert, le point est pour un seul article ou pour l'imbrication ou while + if J'ai senti que ce serait O (1) si je l'arrêtais (je me demande si je peux mettre l'URL moi-même. Enfin, je veux dire). https://qiita.com/drken/items/872ebc3a2b5caaa4a0d0

L'autre jour, j'ai fait une pile avec l'idée suivante, https://qiita.com/AKpirion/items/f3d5b51ab2ee9080e9c6 Pour le moment, push / pop semble n'avoir aucun problème pour comprendre O (1) comme une description.

Désormais, pour l'implémentation de min, lorsque la fonction min est exécutée, il est essentiel d'utiliser l'instruction for pour trouver la valeur minimale à partir des données empilées. Donc, afin de satisfaire O (1), j'ai pensé que ce serait bien si je pouvais mettre à jour la boîte qui stocke la valeur minimale à chaque fois que je pousse. Par conséquent, j'ai ajouté str_min à la valeur initiale.

stack_min.py


class top:
    def __init__(self, capacity: int = 5):
        self.str = [None] * capacity
        self.capa = capacity
        self.ptr = 0
        self.str_min = float("inf") #Boîte pour stocker la valeur minimale

La raison pour laquelle self.str_min est défini sur float ("inf"), c'est-à-dire sur l'infini, est C'est parce que la première valeur poussée peut toujours être stockée dans str_min.

stack_min.py


    def min_str(self, value):
        #self.str_min = min(self.str_min,value)
        if self.str_min > value: #La valeur de la valeur d'entrée est str_S'il est inférieur à min, str_mise à jour min
            self.str_min = value #self.str_min <Si c'est de la valeur, ne faites rien et retournez
        return self.str_min

Personnellement, je pense que vous pouvez le faire avec min () comme indiqué dans le commentaire juste en dessous de def .. dans la figure ci-dessus. Je n'étais pas confiant quand on m'a dit O (1)!?, Alors je me suis enfui avec la déclaration if. Y a-t-il un moyen de vérifier cela!? Je n'ai pas le temps pour le moment, alors je vais aller à Push.

stack_min.py


    def push(self, value):
        if self.ptr >= self.capa:
            raise top.full
        self.str[self.ptr] = value  #Pousser les données vers str!
        top.min_str(self, value)    #Données poussées et str_Comparer avec min et mettre à jour la valeur minimale
        self.ptr += 1

La description de Push est fondamentalement la même qu'avant, En insérant top.min_str (self, value), la valeur minimale peut être mise à jour chaque fois que Push est effectué. C'était bien, il semble que le problème de la recherche puisse être simplifié (* '艸 `)

Et la dernière fois que tu appelles min J'avais besoin d'un peu d'ingéniosité. Pour l'instant, jetez un œil au code ci-dessous.

stack_min.py


while True:
    num = int(input("select 1.push , 2.pop : , 3.min "))

    if num == 1:
        s = int(input("enter data: "))
        try:
            test.push(s)
        except test.full:
            print("full!")
    elif num == 2:
        try:
            x = test.pop()
            print(x)
        except test.empty:
            print("empty!")
    elif num == 3:
        print(test.min_str(float("inf"))) #Comparez l'infini et le minimum
    else:
        break

Je peux appeler min en tapant d'abord 3, Puisqu'il s'agit de def min_str (self, value) Si vous ne mettez rien dans la partie valeur, vous obtiendrez une erreur. J'ai donc poussé l'infini pour m'assurer de pouvoir obtenir la valeur minimale.

Cette fois, il n'y avait pas de photos avec des images, je suis désolé. J'ai également écrit un article comme celui-ci, alors n'hésitez pas à me contacter.

Essayez d'implémenter deux piles en Python sur un seul tableau https://qiita.com/AKpirion/items/2e74eecd30063a01d2fc

Passez un bon week-end ・ ω ・ ´) 尸

Recommended Posts

Ajoutez la fonction pour renvoyer la valeur minimale (min) à la pile faite par Python, mais push / pop / min est de base O (1) !!
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
[Python] Qu'est-ce qu'un argument formel? Comment définir la valeur initiale
[Python] Explique comment utiliser la fonction range avec un exemple concret
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
J'ai créé une fonction pour voir le mouvement d'un tableau à deux dimensions (Python)
[Python] Assurez-vous que la fonction reçue est une fonction définie par l'utilisateur
[Linux] [C / C ++] Comment obtenir la valeur d'adresse de retour d'une fonction et le nom de fonction de l'appelant
[C / C ++] Passez la valeur calculée en C / C ++ à une fonction python pour exécuter le processus et utilisez cette valeur en C / C ++.
La valeur de meta lors de la spécification d'une fonction sans valeur de retour avec Dask dataframe s'applique
J'ai créé une classe pour obtenir le résultat de l'analyse par MeCab dans ndarray avec python
J'ai créé une fonction pour découper l'image de python openCV, alors veuillez l'utiliser.
J'ai aussi essayé d'imiter la fonction monade et la monade d'état avec le générateur en Python
Je veux initialiser si la valeur est vide (python)
Créez un bot Mastodon avec une fonction pour répondre automatiquement avec Python
Connaissances minimales pour démarrer avec le module de journalisation Python
J'ai créé un package pour filtrer les séries chronologiques avec python
Probablement le moyen le plus simple de créer un pdf avec Python 3
J'ai fait une fonction pour vérifier le modèle de DCGAN
Pour renvoyer char * dans une fonction de rappel à l'aide de ctypes en Python
Comment obtenir la dernière (dernière) valeur d'une liste en Python
La façon habituelle d'ajouter un noyau avec Jupyter Notebook
[Introduction à Python] Comment obtenir des données avec la fonction listdir
Extraire la valeur la plus proche d'une valeur à partir d'un élément de liste en Python
Dans le dictionnaire python, si une clé inexistante est accédée, initialisez-la avec une valeur arbitraire
J'ai créé une fonction pour vérifier si le webhook est reçu dans Lambda pour le moment
Une raison simple pour laquelle la valeur de retour de round (2.675,2) est de 2,67 en python (elle devrait être de 2,68 en réalité ...)