Heim > Backend-Entwicklung > Golang > Wie können wir das Scannen von Eingaben in Go optimieren, um Zeitüberschreitungen bei der Konkurrenzprogrammierung zu vermeiden?

Wie können wir das Scannen von Eingaben in Go optimieren, um Zeitüberschreitungen bei der Konkurrenzprogrammierung zu vermeiden?

Susan Sarandon
Freigeben: 2024-12-25 21:56:15
Original
741 Leute haben es durchsucht

How Can We Optimize Input Scanning in Go to Avoid Timeouts in Competitive Programming?

Schnelleres Scannen von Eingaben für verbesserte Codeleistung

Das bereitgestellte Programm zielt darauf ab, eine Codierungsherausforderung von SPOJ zu lösen. Der Eingabescanvorgang scheint jedoch ein Zeitüberschreitungsproblem zu verursachen. Trotz der Verwendung von bufio zum schnelleren Lesen von Eingaben tritt im Code immer noch dieses Problem auf.

Um dieses Problem zu beheben, untersuchen wir zwei Optimierungstechniken:

1. Verwendung von bufio.Scanner

Anstatt fmt.Fscan zum zeilenweisen Lesen von Eingaben zu verwenden, können wir bufio.Scanner verwenden. Dieser Ansatz rationalisiert den Prozess durch die Nutzung der Bytes()-Methode, die Rohbytes direkt zurückgibt, anstatt sie in Zeichenfolgen umzuwandeln.

2. Benutzerdefinierte Ganzzahl-Konvertierungsfunktion

Um die Geschwindigkeit weiter zu erhöhen, können wir eine spezielle Konverterfunktion, toInt(), einführen, die effizient Ganzzahlen aus den von bufio.Scanner erhaltenen Rohbytes extrahiert. Diese Funktion übersetzt die Bytefolge, die eine Dezimalzahl darstellt, direkt in eine Ganzzahl und eliminiert so den Aufwand für die String-Konvertierung.

Der aktualisierte Code, der diese Optimierungen enthält, lautet wie folgt:

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
}
Nach dem Login kopieren

Durch die Kombination von bufio .Scanner mit der benutzerdefinierten toInt()-Funktion erhöhen wir die Effizienz beim Lesen und Konvertieren von Eingaben erheblich. Folglich wird erwartet, dass diese optimierte Lösung viel schneller arbeitet als die Originalversion und das zuvor aufgetretene Zeitüberschreitungsproblem löst.

Das obige ist der detaillierte Inhalt vonWie können wir das Scannen von Eingaben in Go optimieren, um Zeitüberschreitungen bei der Konkurrenzprogrammierung zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage