gpt4 book ai didi

f# - 如何更快地读取数据?

转载 作者:行者123 更新时间:2023-12-05 00:05:23 25 4
gpt4 key购买 nike

嗯……找到一种使用 的速度足够快地读/写数据以在这个问题( https://www.spoj.pl/problems/INTEST/ )中被接受的方法有点挑战F# .

我的代码 ( http://paste.ubuntu.com/548748/ ) 得到 TLE...

任何想法如何加快数据读取?

最佳答案

我的这个版本超过了时间限制(但仍然非常慢~14秒):

open System
open System.IO

// need to change standard buffer, not to add an additional one
let stream = new StreamReader(Console.OpenStandardInput(4096))

let stdin = Seq.unfold (fun s -> if s = null then None else Some (s,stream.ReadLine())) <| stream.ReadLine()

let inline s2i (s : string) = Array.fold (fun a d -> a*10u + (uint32 d - uint32 '0') ) 0u <| s.ToCharArray()

let calc =
let fl = Seq.head stdin
let [|_;ks|] = fl.Split(' ')
let k = uint32 ks
Seq.fold (fun a s -> if (s2i s) % k = 0u then a+1 else a) 0 <| Seq.skip 1 stdin

printf "%A" calc

虽然这个版本的瓶颈其实是 string -> uint32转换(从字符串转换的标准 uint32 甚至更慢)在我的示例输入(~100M 文件)上读取本身需要大约 2 秒(总时间为 6 秒) - 仍然不是一个很好的结果。曾经 s2i以命令式风格重写,在 spoj 上的总运行时间可以减少到 10 秒:
let inline s2i (s : string) =
let mutable a = 0u
for i in 0..s.Length-1 do a <- a*10u + uint32 (s.Chars(i)) - uint32 '0'
a

关于f# - 如何更快地读取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4561084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com