【发布时间】:2021-05-01 18:20:36
【问题描述】:
请原谅,因为我对空间复杂度或时间复杂度都不太熟悉。
我的问题是,
想象一下,Java 中有一段代码会读取一个 .csv 文件,然后将每一行打印到一个 .txt 文件中作为输出。
据我了解,时间复杂度在某种程度上取决于行数。 空间复杂度是运行时需要多少空间。 (如果有错误请告诉我)
如上所述, 如果我编写的代码会一次将 input.csv 中的所有行转换为某种数据结构,然后使用相同的数据结构将整个内容打印到 output.txt 中,它会不会让我的空间复杂度更差但更好的时间复杂度? 还, 如果我逐行读取并将它们打印到同一个循环内的 output.txt 上,它会给我带来更好的空间复杂度但更差的时间复杂度吗?
如果问题不清楚,请告诉我。 提前致谢。
【问题讨论】:
-
CSV 文件已经是文本文件,因此您的算法本质上只是将文本文件复制到另一个文件。执行此操作的任何合理算法的运行时间都是 O(n),并且算法的空间复杂度也是 O(n),因为您将整个文件加载到内存中。如果您改为逐块复制,则空间复杂度将为 O(1),假设这些块具有固定大小(例如,使用固定大小的缓冲区)。
-
总时间取决于输入的大小,时间complexity是在给定大小的情况下衡量所花费的时间输入,因此保持不变(唯一的依赖是算法,而不是输入,除非我们区分最佳、最差和平均情况)。在实践中,您通常更关心实际运行时间而不是复杂性,因为触发大量垃圾收集的 O(n) 算法可能比不触发大量垃圾收集的 O(n^2) 算法差很多(例如),这不是传统复杂性分析所包含的内容。
标签: algorithm time-complexity space-complexity