


Wie kann bufio.Scanner und optimierte Nummernkonvertierung das Scannen von Eingaben in Go-Programmen beschleunigen?
Dec 17, 2024 pm 05:43 PMVerbesserung 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!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Dateien in Go Language bequem?

Wie schreibe ich Benchmarks, die die reale Leistung in Go genau widerspiegeln?
