Verbesserung der Eingabescangeschwindigkeit für eine schnellere Programmausführung
Problembeschreibung
Der angegebene Code versucht um ein SPOJ-Problem zu lösen, indem man eine Liste von Zahlen durchläuft und ermittelt, ob jede Zahl durch eine Konstante k teilbar ist. Allerdings tritt bei der Ausführung eine Zeitüberschreitung auf, da das Scannen der Eingaben als langsam empfunden wird.
Lösung
Verwendung von bufio.Scanner
Zur Verbesserung Um die Effizienz des Eingabescannens zu verbessern, können wir den bufio.Scanner nutzen, der auf die schnelle zeilenweise Eingabeverarbeitung zugeschnitten ist. Anstelle des standardmäßigen fmt.Scan verwenden wir bufio.Scanner, um Eingabezeilen abzurufen.
Zahlenkonvertierung optimieren
Zur verbesserten Zahlenkonvertierung führen wir toInt() ein Funktion, die Zahlen direkt aus rohen Eingabebytes extrahiert. Dies vermeidet die langsamere Konvertierungsmethode von Scanner.Text() und eliminiert unnötige String-Erstellung.
toInt() erreicht dies, indem es die Eingabebytes durchläuft und das Ergebnis schrittweise mit 10 multipliziert. Die Bytes entsprechen dem UTF- 8 codierte Folge der Dezimaldarstellung der Zahl.
Code Snippet
Das überarbeitete Code-Snippet unten enthält die folgenden Optimierungen:
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 }
Zusätzliche Hinweise
Diese optimierte Lösung zeigt eine deutliche Verbesserung in Ausführungsgeschwindigkeit im Vergleich zu früheren Methoden. Es wird eine gültige Eingabe vorausgesetzt, einschließlich des Vorhandenseins von n Zeilen nach der ersten Eingabe.
Für Szenarien mit geschlossenen Eingaben kann eine vereinfachte for-Schleife verwendet werden:
for scanner.Scan() { if toInt(scanner.Bytes())%k == 0 { c++ } }
Das obige ist der detaillierte Inhalt vonWie kann bufio.Scanner und optimierte Nummernkonvertierung das Scannen von Eingaben in Go-Programmen beschleunigen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!