首頁 > 後端開發 > Golang > bufio.Scanner 和最佳化的數位轉換如何加速 Go 程式中的輸入掃描?

bufio.Scanner 和最佳化的數位轉換如何加速 Go 程式中的輸入掃描?

Linda Hamilton
發布: 2024-12-17 17:43:11
原創
264 人瀏覽過

How Can bufio.Scanner and Optimized Number Conversion Speed Up Input Scanning in Go Programs?

提高輸入掃描速度以加快程式執行速度

問題陳述

問題陳述

給定的程式碼嘗試透過迭代數字列表並確定每個數字是否為解決SPOJ 問題可被常數k 整除。然而,由於感知輸入掃描速度較慢,執行逾時。

解決方案

利用bufio.Scanner

來增強輸入掃描效率,我們可以利用它掃描效率,我們可以利用它掃描.Scanner,它是為高速逐行輸入處理而客製化的。我們使用 bufio.Scanner 來檢索輸入行,而不是預設的 fmt.Scan。

最佳化數字轉換

為了改善數字轉換,我們引入了 toInt()函數,它直接從原始輸入位元組中提取數字。這避免了 Scanner.Text() 的較慢轉換方法,並消除了不必要的字串建立。 toInt() 透過迭代輸入位元組並將結果逐漸乘以 10 來實現這一點。這些位元組對應於 UTF-數字十進位表示形式的 8 個編碼序列。

程式碼片段
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
}
登入後複製

下面修訂後的程式碼片段包含了這些最佳化:

附加說明

for scanner.Scan() {
    if toInt(scanner.Bytes())%k == 0 {
        c++
    }
}
登入後複製
附加說明附加說明附加說明附加說明🎜>此最佳化的解決方案顯示了以下方面的顯著改進:與先前的方法相比的執行速度。它假設有效輸入,包括初始輸入後存在 n 行。 對於涉及封閉輸入的場景,可以使用簡化的 for 迴圈:

以上是bufio.Scanner 和最佳化的數位轉換如何加速 Go 程式中的輸入掃描?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板