Amélioration de la vitesse d'analyse des entrées pour une exécution plus rapide du programme
Énoncé du problème
Le code donné tente pour résoudre un problème SPOJ en parcourant une liste de nombres et en déterminant si chaque nombre est divisible par une constante k. Cependant, l'exécution expire en raison d'une analyse d'entrée lente perçue.
Solution
Utilisation de bufio.Scanner
Pour améliorer l'efficacité de l'analyse des entrées, nous pouvons tirer parti de bufio.Scanner, qui est conçu pour la gestion des entrées ligne par ligne à grande vitesse. Au lieu du fmt.Scan par défaut, nous utilisons bufio.Scanner pour récupérer les lignes d'entrée.
Optimisation de la conversion des nombres
Pour une conversion de nombres améliorée, nous introduisons toInt() fonction, qui extrait directement les nombres des octets d’entrée bruts. Cela évite la méthode de conversion plus lente de Scanner.Text() et élimine la création de chaînes inutiles.
toInt() y parvient en parcourant les octets d'entrée et en multipliant progressivement le résultat par 10. Les octets correspondent à l'UTF- 8 séquences codées de la représentation décimale du nombre.
Code Extrait
L'extrait de code révisé ci-dessous intègre ces optimisations :
package main import ( "bufio" "fmt" "os" ) func main() { var n, k, c int scanner := bufio.NewScanner(os.Stdin) scanner.Scan() fmt.Sscanf(scanner.Text(), "%d %d", &n, &k) for ;n > 0; n-- { scanner.Scan() if toInt(scanner.Bytes())%k == 0 { c++ } } fmt.Println(c) } func toInt(buf []byte) (n int) { for _, v := range buf { n = n*10 + int(v-'0') } return }
Notes supplémentaires
Cette solution optimisée démontre une amélioration significative de vitesse d’exécution par rapport aux méthodes précédentes. Il suppose une saisie valide, y compris la présence de n lignes après la saisie initiale.
Pour les scénarios impliquant une saisie fermée, une boucle for simplifiée peut être utilisée :
for scanner.Scan() { if toInt(scanner.Bytes())%k == 0 { c++ } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!