查看: 1771| 回复: 15
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] 【求问】时间复杂度分析的疑问

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
最近使用Java刷题,有如下疑问

当我们计算时间复杂度的时候,是否需要计算 Java的一些数据结构在调用一些内置方法的开销?

例如:
int arr = new int[]{1,2,4,3,5};
Arrays.sort(arr); //这个位置,我认为应该计算 O(nlogn)的排序开销

当时如果是
for(int i = 0; i < x; i++){
  char ch = string.chatAt(i);//这个chatAt开销是多少我们需要记录吗?
  if(hashset.contains(xxx) == false){ // 这个 HashSet的contains(xx) 开销是多少需要记录吗。。另外还有 HashMap.containsKey(key) 中的containsKey是否需要记录开销呢
//xxx  
}
}

尤其在循环中,如果我们使用了类似 stringA.equals(stringB) 这种,很可能不是O(1)的方法,需要去计算他们的开销吗?

评分

参与人数 1大米 +3 收起 理由
14417335 + 3 给你点个赞!

查看全部评分


上一篇:有没有朋友在seattleU读cs bridge+cs master啊
下一篇:求大神帮忙讲解一道OA的题
推荐
 楼主| Yosaphim 2022-9-21 06:09:44 | 只看该作者
全局:
本帖最后由 Yosaphim 于 2022-9-20 15:17 编辑
icebane 发表于 2022-9-20 05:56
你说的这些确实都要记录,但也都是o(1),所以忽略不计。应该是数据结构没怎么学通。建议补习。

Arrays.sort() 不是O(1)

https://stackoverflow.com/questi ... sort-method-in-java

String equal 大部分情况下也不是 O(1)
回复

使用道具 举报

全局:
icebane 发表于 2022-09-20 17:44:05
是O(n), n是String长度没错. 但在整个算法里 这个n是可以忽略不计的, 就是O(n). 这没啥出处. 没有任何一道题, 或者任何一个面试官会去考虑 String.equals()对于算力的
当然是要考虑的,不然很多题里字符串hash,后缀数组这种东西都没有意义了,还有楼上说的kmp也没有意义了
回复

使用道具 举报

推荐
qiaoqide 2022-9-21 10:06:08 | 只看该作者
全局:
icebane 发表于 2022-9-20 19:44
是O(n), n是String长度没错. 但在整个算法里 这个n是可以忽略不计的, 就是O(n). 这没啥出处. 没有任何一 ...

leetcode里的大部分题目是因为字符串长度有限制,例如少于20个字符,自然不需要考虑String.equal的复杂度,毕竟最多也就是个常数20,这种题目重点也不在字符串上

考字符串的题目里边还是得仔细考虑一下String.equal的复杂度,最简单的例子是如果把String.equal当成O(1)的,KMP算法就没有存在必要了,直接拿S的每个子串去和T判断是否相等就是个线性的字符串匹配算法
回复

使用道具 举报

全局:
当然所有都要记录

回复

使用道具 举报

全局:
你说的这些确实都要记录,但也都是o(1),所以忽略不计。应该是数据结构没怎么学通。建议补习。
回复

使用道具 举报

🔗
ptnnac 2022-9-20 23:28:55 | 只看该作者
全局:
记不清 Java 的新内存分配  memory allocation 的开销如何。
一般认为 amortized 之后是 O(1),应该是宁可浪费memory,也要节省时间。
回复

使用道具 举报

🔗
ConnieQ 2022-9-21 06:21:17 | 只看该作者
全局:
时间复杂度,不就是这些各种全部综合考虑的结果么?不然那是在算什么?
回复

使用道具 举报

🔗
icebane 2022-9-21 06:42:46 | 只看该作者
全局:
Yosaphim 发表于 2022-9-20 17:09
Arrays.sort() 不是O(1)

https://stackoverflow.com/questi ... sort-method-in-java

Arrays.sort() 确实不是O(1), 因为你自己都说答案了, 所以我的意思就不包括这个. 剩下都是O(1). String.equals() 在Leetcode 和 面试里就是O(1), 你非要以算法课的眼光去考虑刷题没有任何意义.
回复

使用道具 举报

🔗
a49481 2022-9-21 07:33:26 来自APP | 只看该作者
全局:
这些要考虑的,凭常识判断就好了,比较容易出错的是PriorityQueue的remove,是O(n)。另外楼上说的String.equals是O(1)的说法,我从来没见到过,包括面试,能否给个出处?
回复

使用道具 举报

🔗
a49481 2022-9-21 07:34:30 来自APP | 只看该作者
全局:
icebane 发表于 2022-09-20 15:42:46
Arrays.sort() 确实不是O(1), 因为你自己都说答案了, 所以我的意思就不包括这个. 剩下都是O(1). String.equals() 在Leetcode 和 面试里就是O(1), 你
String.equals确定是O(1)吗?我第一次见到这种说法,能给个出处不?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表