【发布时间】:2016-07-22 18:13:56
【问题描述】:
所以我正在读取两个文件并将每一行分别存储在两个不同的列表中。现在我必须检查第一个列表中的字符串是否存在于第二个列表中。
通过正常比较,这需要 O(n^2)
但是使用基于图形的数据结构,例如 -
File1_visited[string] = True
File2_visited[string] = True。
我可以检查两者是否为真,然后字符串在两个文件中都存在。这使它成为 O(n)。
还有其他方法可以降低时间复杂度吗?我的理解是否正确?
示例场景 -
文件1-
文本1 文本2 文本3 文字4
文件2-
文本5 文本7 文本1 文本2
比较这两个文件。
【问题讨论】:
-
您的分析遗漏的主要内容是“构建和访问图结构的时间复杂度是多少?”一个简单、相当有效的方法是将两个文件加载到哈希集中,然后检查交叉点。这与您的方法非常相似,但它使用创建和访问非常有效的标准结构。你的文件有多大?
-
假设最大值为 1000 行。我对这两种方法的理解也是正确的。我想到了哈希集,但与第二种方法不同,因为它可能需要遍历每个文件一次
-
如果你的数据集只有1000行,你为什么要关心O(n)?大 O 表示法适用于非常非常大的数字/计算集。 en.wikipedia.org/wiki/Big_O_notation
-
对于最多 1000 行,算法的增长复杂度无关紧要。即使在您简单的 O(n^2) 算法中,这也是 100 万次比较,这对于现代机器来说是小菜一碟。除非您必须比较数千个文件,否则最好做一些简单的实现而不担心性能。只要确保在进行任何处理之前将整个文件加载到内存中就可以了。
-
请记住,您花在开发上的任何时间最终都应该比开发所节省的时间更多。 ;) 如果编写一个简单的算法并让它运行更快,并且您不必一遍又一遍地执行它,那么只需快速执行它并让它运行。
标签: java python time time-complexity