【发布时间】:2013-01-03 18:15:00
【问题描述】:
即使文件大小为 4GB 或更大,如何以优化的方式找到字母 A-Z 的出现(忽略大小写)? C++/C 中可能有哪些不同的实现?
一个实现是:
伪代码
A[26]={0}
loop through each character ch in file
If isalpha(ch)
A[tolower(ch)-'A']+ = 1
End If
end loop
【问题讨论】:
-
如果你操作的是4GB的文件,那么这个程序的运行时间将会被磁盘I/O支配。优化计数将毫无意义。您需要优化 I/O 部分。
-
根据您的应用程序和周围的东西,它可能是一个选项,可以将已经计算的统计数据缓存在磁盘上/在数据库中及其修改时间。只是给出一个想法......
-
对不起,伙计。但是对于这样的问题,您必须考虑使用 apache hadoop 和 map reduce。顺便说一句,他们引入的第一个基本问题与您的重复。
-
@SRINI794,您的磁盘通常没有并行硬件路径。
-
@SRINI794,这就是 Raymond Chen 试图提出的观点——你可以将计数速度提高 1000 倍,但这并没有什么不同,你还在等待磁盘。更多线程实际上会伤害您,因为它们可能会从磁盘的不同部分读取。
标签: c++ c algorithm file optimization