Algorithm 计算hasmap与二进制搜索的O(n)
我试图澄清在以下情况下如何计算O(n): 给定一个排序数组,如何找到两个和O(n)中给定数x相等的数 O(n)解决方案为:Algorithm 计算hasmap与二进制搜索的O(n),algorithm,hashmap,complexity-theory,binary-search,computation-theory,Algorithm,Hashmap,Complexity Theory,Binary Search,Computation Theory,我试图澄清在以下情况下如何计算O(n): 给定一个排序数组,如何找到两个和O(n)中给定数x相等的数 O(n)解决方案为: 移除阵列的第一个元素(e0) 将其添加到hashmap 移除阵列的第一个元素(e1) 目标是e1和x之间的差异 如果目标存在于哈希映射中,则返回该对 将e1添加到hashmap中 重复步骤3-6,直到找到一对或用尽元素 这将是最坏的情况O(n),因为您只需要在阵列上进行一次传递 O(n*logn)解决方案是: 从阵列中删除第一个元素(e1) Target是第一个元素和x之间
这是正确的吗?这听起来像是你正在学习的某门课程中的家庭作业问题。我不会为您解决这个问题-虽然在线找到解决方案很容易-但我会告诉您,我99%确定您的解决方案必须花费O(n)时间作为最坏情况的复杂性。基于散列的解决方案每次查找平均只需要O(1)个时间在你正在学习的某些课程中,这听起来像是一个家庭作业问题。我不会为您解决这个问题-虽然在线找到解决方案很容易-但我会告诉您,我99%确定您的解决方案必须花费O(n)时间作为最坏情况的复杂性。基于散列的解决方案每次查找平均只需要O(1)个时间是的,因为两种算法的ur分析都是正确的 您的第一个算法也使用O(n)空间,因为hashmap。你可以避免
Algo :
1. Consider begin = 0, and end = last_index
2. Consider data[begin] and data[end]
3. If data[begin] + data[end] > req_sum:
end=end - 1 // u need to decrease ur total sum
elif data[begin] + data[end] < req_sum:
begin = begin + 1 // u need to increase ur total sum
elif data[begin] + data[end] == req_sum:
print("found")
4. Continue from Step 2.
算法:
1.考虑开始=0,而结束=LaSTyx索引
2.考虑数据[开始]和数据[结束]
3.如果数据[开始]+数据[结束]>请求和:
end=end-1//你需要减少你的总数
elif数据[开始]+数据[结束]
显然,要避免
end
和其他拐角处的情况 是的,对于这两种算法,ur分析都是正确的
您的第一个算法也使用O(n)空间,因为hashmap。你可以避免
Algo :
1. Consider begin = 0, and end = last_index
2. Consider data[begin] and data[end]
3. If data[begin] + data[end] > req_sum:
end=end - 1 // u need to decrease ur total sum
elif data[begin] + data[end] < req_sum:
begin = begin + 1 // u need to increase ur total sum
elif data[begin] + data[end] == req_sum:
print("found")
4. Continue from Step 2.
算法:
1.考虑开始=0,而结束=LaSTyx索引
2.考虑数据[开始]和数据[结束]
3.如果数据[开始]+数据[结束]>请求和:
end=end-1//你需要减少你的总数
elif数据[开始]+数据[结束]
显然,要避免
end
和其他拐角处的情况 从数组中删除元素可能是O(N),这取决于您使用的语言/库,因此最好将元素留在数组中,否则您的运行时间将乘以O(N)。是的,指针肯定会更好,感谢您的建议从数组中删除元素可能是O(N),根据您使用的语言/库的不同,因此最好将元素保留在数组中,否则您的运行时间将乘以O(N)。是的,指针肯定会更好,谢谢您的建议。我只是建议他使用其他算法来解决此问题。他的硬件是证明上述算法的时间复杂度,但我没有。:)事实上,我是一个自作主张的程序员,所以这更符合我的兴趣。我一直在做一些有竞争力的编程和算法优化,所以我试图通过阅读维基百科和观看YouTube来了解时间复杂性。很高兴能得到一些反馈,因为我没有答题纸:-)我只是建议他用其他算法解决这个问题。他的硬件是证明上述算法的时间复杂度,但我没有。:)事实上,我是一个自作主张的程序员,所以这更符合我的兴趣。我一直在做一些有竞争力的编程和算法优化,所以我试图通过阅读维基百科和观看YouTube来了解时间复杂性。很高兴得到一些反馈,因为我没有答题纸:-)