[PYTHON] TLE semblait effrayant en fonction de la manière dont l'entrée était reçue

Oui. codeforces http://codeforces.com/contest/373/problem/C

Tweet original https://twitter.com/cocodrips/statuses/412848727175331840 Gist qui a été publié https://gist.github.com/cocodrips/8001370

Veuillez vous référer à la publication ci-dessus pour le texte intégral du code original.

à l'origine


if __name__ == "__main__":
    num = map(int, raw_input().split())
    num=num[0]
    data = []
    for _ in range(num):
        next=map(int, raw_input().split())
        data.append(next[0])
    solve(data)

ma proposition


if __name__ == "__main__":
    num = int(raw_input())
    data = []
    for x in range(num):
        data.append(int(raw_input()))
    solve(data)

Pour les données de test, copiez l'exemple de cas et préparez 1 ligne + 200 000 lignes de données. La première ligne est le nombre de lignes à donner, et les 200 000 lignes suivantes sont les données copiées dans Texto.

CPU et mémoire d'Ichio Processor 2.5 GHz Intel Core i5 Memory 16 GB 1333 MHz DDR3

Mesure du temps

time


import=time
start=time.clock()
##Autre partie d'exécution
end=time.clock()
t=end-start

Comment tu as commenté


if __name__ == "__main__":
    num = int(raw_input())
    data = (int(raw_input()) for _ in xrange(num))
    solve(data)

Exécutez 3 fois et indiquez la valeur du milieu dans le tableau ci-dessous

Partie 1: Données originales Partie 2: num = int (raw_input ()) Seule la manière de recevoir la première ligne est modifiée Partie 3: Changez uniquement la façon de recevoir data.append (int (raw_input ())) en tournant avec for Partie 4: Les deux ont changé Partie 5: Comment vous avez commenté

modèle temps de traitement
Partie 1 0.990795 secondes
Partie 2 0.995793 secondes
Partie 3 0.661866 secondes
Partie 4 0.677707 secondes
Partie 5 0.647318 secondes

Le décalage horaire était cette fois significatif dans la manière de recevoir à partir de la deuxième ligne ...

Le cas de test dans ma première ligne était de 200 000, et je n'ai reçu que 6 chiffres par ligne à partir de 500 000, qui était le TLE maximum sur les conditions préalables pour la question, et je ne pouvais pas sentir le décalage horaire.

À première vue, il semble qu'il n'y ait pas beaucoup de différence entre les parties 3, 4 et 5, et il semble bon de dire qu'il y a une différence de vitesse selon qu'elle est inférieure ou non à 0,65 seconde.

En bonus

data.append(input())


 Lorsque j'ai supprimé le casting avec int, cela a pris plusieurs fois plus de temps, il semble donc préférable de ne pas le supprimer.

Recommended Posts

TLE semblait effrayant en fonction de la manière dont l'entrée était reçue
Comment filtrer les clés externes qui peuvent être sélectionnées sur l'écran d'administration de Django
Réfléchissez à la programmation de Python sur votre iPad
Comment enregistrer les mêmes données plusieurs fois avec une seule entrée sur l'écran de gestion de Django
Comment résoudre le problème que le contenu vidéo ne peut pas être lu sur Firefox pour Linux
Comment changer le fichier de configuration pour qu'il soit lu par Python
[Hyperledger Iroha] Remarques sur l'utilisation du SDK Python
Comment déployer Pybot, le manuel Python le plus simple, sur Heroku
Le problème devient plus facile à résoudre en fonction de la méthode de formulation
Remarques sur l'utilisation de la guimauve dans la bibliothèque de schémas
Comment imprimer des caractères sur la console avant de démarrer dans ARM
Comment utiliser le générateur
Comment s'inscrire auprès de pypi
[Python] Comment utiliser input ()
Comment utiliser le décorateur
Comment augmenter l'axe
Comment démarrer la première projection
Le record auquel j'étais accro en mettant MeCab dans Heroku
Remarque sur la façon de vérifier la connexion au port du serveur de licences
Est-il facile de synthétiser un médicament sur le marché?
Comment déterminer qu'une clé croisée a été entrée dans Python3
Django: fait varier le nombre de formulaires enfants en fonction du nombre d'éléments d'entrée
Comment utiliser Jupyter sur le frontal de Spacon ITO
Différence de vitesse d'exécution en fonction de la façon d'écrire la fonction Cython
Comment mettre à jour la version Python de Cloud Shell dans GCP
Comment refléter l'erreur de validation et saisir le contenu sur la page précédente sans utiliser le rendu dans l'action