gpt4 book ai didi

java - 分析这个简单算法的正确方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:46:44 26 4
gpt4 key购买 nike

给定一个文件中的一些字符串,ab,abc,ad, ace, ddd ...,找出字符串中是否有某个字符串 S。如果我想使用散列来检查 S 是否存在。

算法分析:由于每个“put”操作需要 O(1) * K 时间,其中 K 是字符串的长度,因此构建映射需要 O(n * K) 时间,其中 n 是数字字符串。并且查找需要常数时间,所以总时间是 O(n*k)。这是正确的想法吗?虽然我们经常说哈希表允许持续时间查找,但它通常会忽略构建哈希所花费的时间。在回答这样的问题时,我应该说时间复杂度是 O(n*k),还是 O(n)?多谢。刚开始学习算法分析。

String line = null;

BufferedReader br = new BufferedReader(new File("file.txt"));
HashMap<String, Integer> strs = new HashMap<String,Integer>();
while((line=br.readLine()) != null){
Integer count = strs.get(line);
if( count == null){
strs.put(line, 1);
}
count++;
}

// Suppose the string to be checked is "str";
if(strs.contains(str)){
return true;
}
return false;

最佳答案

当你说 O(n) 时,n 与输入的大小成正比。但是,您问的是是否声明 O(n * k) ,其中 k 也与输入的大小成正比。在这种情况下,您真正​​要说的是 O(n^2) - 其中算法可能需要时间 t 输入 K,但输入 2k 需要时间 4t。这是你想说的吗?

如果您只是想说该算法需要 t 时间输入 k,需要 2t 时间输入 2k,那么您只需说该算法是 O(n)。

现在开始算法...如果我对它的解释是正确的,这些步骤是在读取文件时构建哈希,然后是哈希表查找。一次遍历文件的时间复杂度为 O(n),同时将所有字符串放入哈希表中也是 O(n)(假设哈希表实现得相当好)。在哈希表中查找一项是 O(1)。

所以总体时间复杂度是O(n),并发O(n),再加上O(1)... 通常我们只是把这个描述为O(n),或者说时间与对象的大小成线性比例输入。

关于java - 分析这个简单算法的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21389660/

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