[Livre Kenchon à Python] -Chapitre 3- "Entraînez vos compétences en résolution de problèmes! Algorithmes et structures de données" J'ai réécrit le code posté en Python!

introduction

Cet article est le livre de Kenchon, qui contient de nombreuses explications sur la programmation compétitive, ** Entraînez vos compétences en résolution de problèmes! Algorithmes et structures de données(けんちょんさん本)**について、掲載コードをPythonに翻訳したものを、備忘のためまとめたものです。

Sur cette page, nous présenterons le contenu du chapitre 3! Veuillez me pardonner s'il y a des bugs.

Consultez les pages suivantes pour obtenir des liens vers d'autres chapitres. [Table des matières] https://qiita.com/KevinST/items/002676619a583754bf76

code3.1 Méthode de recherche linéaire

C'est celui qui "vérifions dans l'ordre par l'avant"!

code3-1.py


#Recevoir des entrées
N, v = map(int, input().split())
a = list(map(int, input().split()))

#Recherche linéaire
exist = False
for i in range(N):
    if a[i] == v:
        exist = True

#Sortie de résultat
if exist:
    print("Yes")
else:
    print("No")

[Exemple d'entrée] 5 1 2 3 4 1 11 [Exemple de sortie] Yes

code3.2 Récupère "l'indice" qui a un élément spécifique

Il est maintenant temps d'obtenir l'index.

code3-2.py


#Recevoir des entrées
N, v = map(int, input().split())
a = list(map(int, input().split()))


##Recherche linéaire##
found_id = -1
for i in range(N):
    if a[i] == v:
        found_id = i
        break
print(found_id)

[Exemple d'entrée] 4 2 0 2 -1 11 [Exemple de sortie] 1

Pour le nombre "2" a[0]: 0 a[1]: 2 ... Je vais le chercher. Cette fois, un [1] = 2, et le nombre que vous cherchiez ici correspond à un [i]. Cassez ici et sortez.

code3.3 Trouver la valeur minimale

code3-3.py


#Recevoir des entrées
N = int(input())
a = list(map(int, input().split()))


##Recherche linéaire##
#Définissez la valeur initiale de la valeur minimale sur "infini"
min_value = float("inf")
for i in range(N):
    if a[i] < min_value:
        min_value = a[i]
print(min_value)

[Exemple d'entrée] 4 0 2 -1 11 [Exemple de sortie] -1

J'ai pu trouver la plus petite valeur "-1". Le montant du calcul est de O $ (N) $.

code3.4 Trouver la valeur minimale de la somme des paires (plage de K ou plus)

Sélectionnez un élément du tableau a et un élément du tableau b et ajoutez-les pour créer un nombre. Parmi eux, choisissez celui avec K ou plus et le plus petit.

code3-4.py


#Recevoir des entrées
N, K = map(int, input().split())
a = list(map(int, input().split()))
b = list(map(int, input().split()))

#Recherche linéaire
min_value = float("inf")
for i in range(N):
    for j in range(N):
        #Si la somme est inférieure à K, jetez-la
        if a[i] + b[j] < K:
            continue
        #Mise à jour minimum
        if a[i] + b[j] < min_value:
            min_value = a[i] + b[j]
print(min_value)

[Exemple d'entrée] 4 10 1 2 5 6 7 12 16 22 [Exemple de sortie] 12

code3.5 Détermine si le i-ème élément est inclus dans le sous-ensemble représenté par le bit entier

Il s'agit d'une préparation à la soi-disant recherche par bits. J'ai également ajouté une entrée et une sortie pour vérifier le fonctionnement.

code3-5.py


#Recevoir des entrées
i = int(input())
bit = int(input(), 2)

#Vérifiez si le sous-ensemble représenté par bit contient le i-ème élément
if bit & (1 << i):
    print("Yes")
else:
    print("No")

[Exemple d'entrée] 1 1010 [Exemple de sortie] Yes

La recherche complète de bits est l'une des méthodes de recherche complète et elle peut énumérer tous les modèles ON / OFF. Pour plus de détails, voir le livre et les commentaires en ligne de Kencho-san.

Pour ceux qui disent "Bi, bit ... Non, c'est difficile> <", vous pouvez utiliser la fonction Python pour tout rechercher sans penser à bit. (Voir "Supplément 3.6")

code3.6 Méthode de recherche complète utilisant des bits pour un problème de somme partielle

C'est une recherche un peu complète.

code3-6.py


#Recevoir une entrée
N, W = map(int, input().split())
a = list(map(int, input().split()))

#le bit est 2^Se déplace dans n sous-ensembles différents
exist = False
for bit in range(2**N):
    #La somme des éléments contenus dans le sous-ensemble
    sum_val = 0
    for i in range(N):
        #i-ème élément a[i]Est inclus dans le sous-ensemble
        if bit & (1 << i):
            sum_val += a[i]

    #sum_Si val correspond à W
    if sum_val == W:
        exist = True

if exist:
    print("Yes")
else:
    pritn("No")

[Exemple d'entrée] 4 10 1 9 100 200 [Exemple de sortie] Yes

Considérons le sous-ensemble (1,9). Sa somme est de 10, donc cela correspond à W. Donc, la réponse est oui".

Supplément code3.6: Toutes les énumérations utilisant itertools.combinations

peu c'est dur! Pour ceux qui disent, nous avons préparé un autre ver. Comme procédure

    1. Décidez du nombre de pièces à retirer de la séquence (0 à N pièces)
  1. Considérez que le nombre déterminé par 1 est extrait du tableau de N éléments. Lister tous les modèles à extraire 0: [] 1 pièce: [a0], [a1], [a2] ... 2 pièces: [a0, a1], [a0, a2], ..., [aN-1, aN] ** * Utilisez la fonction de combinaisons dans la bibliothèque Python pratique itertools **

Python est bon! (Publicité)

code3-6-another_ver.py


from itertools import combinations
N, W = map(int, input().split())
a = list(map(int, input().split()))

exist = False

#Déterminez le nombre d'éléments à récupérer (num_of_a): 0 à N
for num_of_a in range(N+1):
    #De a, tout num_of_Extraire des éléments avec une méthode d'extraction et stocker chacun dans le modèle variable
    for pattern in combinations(a, num_of_a):
        #Calculer le total
        sum_val = sum(list(pattern))
        #sum_Si val correspond à W
        if sum_val == W:
            exist = True

if exist:
    print("Yes")
else:
    pritn("No")

[Exemple d'entrée] 4 10 1 9 100 200 [Exemple de sortie] Yes

Si vous souhaitez en savoir plus sur itertools, la page suivante peut être utile. Si vous le lisez, vous serez impressionné par la commodité de la bibliothèque standard Python! Wow, itertools

Cliquez ici pour le chapitre 4 https://qiita.com/KevinST/items/f846d57e56242c6e1293

Recommended Posts

[Livre Kenchon à Python] -Chapitre 3- "Entraînez vos compétences en résolution de problèmes! Algorithmes et structures de données" J'ai réécrit le code posté en Python!
[Livre Kenchon à Python] -Chapitre 2- "Entraînez vos compétences en résolution de problèmes! Algorithmes et structures de données" J'ai réécrit le code posté en Python!
[Livre Kenchon à Python] -Chapitre 4- "Entraînez vos compétences en résolution de problèmes! Algorithmes et structures de données" J'ai réécrit le code posté en Python!
[Livre Kenchon vers Python] "Entraînez vos compétences en résolution de problèmes! Algorithmes et structures de données" J'ai réécrit le code posté en Python! -table des matières-
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de réponse de code Python --1.3 URLify
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de réponse au code Python - 2,6 fois
"Livre pour former des compétences en programmation pour combattre dans le monde" Exemple de réponse de code Python --2.4 Fractionnement de la liste
"Un livre pour former les compétences de programmation pour combattre dans le monde" Exemple de réponse de code Python --2.7 nœuds d'intersection
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de réponse au code Python - Matrice de 1,8 "0"
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de solution de code Python --1.6 Compression de chaîne de caractères
"Un livre pour former les compétences de programmation pour combattre dans le monde" Exemple de réponse de code Python --3.1 Trois piles
"Livre pour former des compétences en programmation pour combattre dans le monde" Exemple de solution de code Python - 1.7 Rotation de matrice
"Un livre pour former des compétences en programmation pour combattre dans le monde" Exemple de réponse au code Python --1.4 Séquence de phrases
"Un livre pour former les compétences de programmation pour combattre dans le monde" Exemple de solution de code Python --2.8 Détection de boucle
"Livre pour former les compétences de programmation pour combattre dans le monde" Exemple de réponse de code Python --- Éléments supprimés entre 2.3
"Livre pour former des compétences en programmation pour combattre dans le monde" Exemple de solution de code Python --2.1 Supprimer les éléments en double
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de réponse de code Python --1.9 Rotation de la chaîne de caractères
"Livre pour former des compétences en programmation pour combattre dans le monde" Exemple de solution de code Python --1.1 Chaîne de caractères en double
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de réponse de code Python --2.2 Renvoyer Kth par l'arrière
"Livre pour former la capacité de programmation à se battre dans le monde" Exemple de réponse de code Python --1.2 Compter le nombre des mêmes caractères
J'ai senti que j'avais porté le code Python en C ++ 98.
"Un livre pour former les compétences de programmation pour combattre dans le monde" Exemple de réponse de code Python --2.5 Somme de deux nombres affichés dans la liste
Résolvez le livre en spirale (algorithme et structure de données) avec python!
Créer un environnement Python et transférer des données vers le serveur
Je veux connaître la nature de Python et pip
J'ai essayé d'énumérer les différences entre java et python
Je souhaite mapper le code EDINET et le numéro de valeur
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie1-
J'ai essayé de résoudre l'édition du débutant du livre des fourmis avec python
[Introduction à Python] J'ai comparé les conventions de nommage de C # et Python.
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie2-
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie4-
J'ai écrit le code pour écrire le code Brainf * ck en python
Résolution de l'introduction d'AOJ aux algorithmes et aux structures de données en Python -Partie3-
J'ai essayé d'obtenir et d'analyser les données statistiques de la nouvelle Corona avec Python: données de l'Université John's Hopkins
J'ai essayé de refactoriser le code du modèle publié dans "Obtenir des images de l'API Flickr avec Python" (Partie 2)