Soft_Job 板


LINE

刚刚编辑文章按到复原草稿 插入很多不必要东西 但用Pitt没办法编辑 所以删除重po不好意思 以下代之前社团认识的学妹代po询问 我是今年毕业的新鲜人 今天面试白板考的时候考了跟差集有关的问题 关於时间复杂度的部分怎麽想都想不通 已经查过资料也跟要考资工所的朋友、资工系的朋友讨论过 仍然不确定答案,想请版上大神开示一下:D 题目:有A、B两个未经排序的array A有n个整数,B有m个整数 写一个function回传在A且不在B的整数。 (皆先不讨论A、B内各自有重复元素的情况) 我的做法: 1.先把B的每个元素放进dictionary 2.然後用for检查A的每个元素是否为dictionary的key,不是的话就加入ans的list 3.回传ans 想以python的dictionary来讨论这题的时间复杂度 用B建立长度为m的dictionary 新增一组key-value时间复杂度是O(1);A的长度为n 查找是否在dictionary的key时的时间复杂度是O(1) 我觉得时间复杂度是O(m+n)。 参考leetcode简中板的类似题目的官方详解(只有简中版讨论区有官方详解) https://reurl.cc/KAaRmy leetcode这题基本一样 是找出在A且在B的整数 官方是用set来实作 时间复杂度是O(m+n) 想请问dictionary和set()底层的hash原理会是造成时间复杂度不同的关键吗? Python程式码如下 def solution(A:List[int], B:List[int]): ans = [] dic = dict() for b in B: dic[b] = b for a in A: if a not in dic: ans.append(a) return ans 另外,我知道hash在python以外的语言像是C/C++ 若是基於红黑树来实做的话 时间复杂度会是O(nlogm)。 我想问的是python的时间复杂度! 补充 想知道答案是因为 面试官说我的答案O(m+n)一定不对 他很肯定说这样做答案绝对不是线性的 想请问这样计算时间复杂度到底哪里有问题 谢谢 --
QR Code



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.24.250.114 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1629135646.A.93D.html
1F:推 mimi9126: O(m+n)是对的吧 08/17 02:01
2F:→ sjensen: 两个loop分开怎麽不会是线型的,不解+1 08/17 02:09
3F:→ charle0911: 不专业回答:HashMap广义来说都是O(1)碰撞之後才会用 08/17 02:54
4F:→ charle0911: 红黑树实践排列碰撞的元素 当Hash array足够大时红黑 08/17 02:54
5F:→ charle0911: 树的成本可以不计 广义是这样 若有错请高手指点迷津 08/17 02:54
6F:→ charle0911: 不过你po的程式码O(m+n)完全没毛病 不知面试官的思 08/17 02:54
7F:→ charle0911: 路是怎样为何会觉得不是 08/17 02:54
8F:推 sorryla: 你应该当场反问哪里不对的,搞不好是面试官自己根本不懂 08/17 04:28
9F:→ wawi2: 面试官搞错的机率很大 也有可能你们的沟通有一些误会 08/17 06:41
10F:→ wawi2: move on就可以了 08/17 06:41
11F:推 shiauji: 面试官大概把TreeMap and HashMap搞错了吧 08/17 06:55
12F:推 NciscalA: c++ 的 std::set 不是 hash map ,std::unorderd_map 08/17 07:05
13F:→ NciscalA: 才是噢。不过前面 O(m+n) 看起来没什麽问题。 08/17 07:05
14F:→ NciscalA: 啊是 std::map 不是 std::set 08/17 07:06
15F:推 WaterLengend: O(m+n) 一票 08/17 08:13
16F:推 aspwell520: 再一票O(m+n) 08/17 08:31
17F:推 Amazonite96: c++ 的map (TreeMap)vs unordered map(HashMap)前 08/17 08:39
18F:→ Amazonite96: 者强调有序所以会用RBTree就会多了log复杂度,後者大 08/17 08:39
19F:→ Amazonite96: Hash 表查询O(1) 但有碰撞好像另当别论,不过机率低 08/17 08:39
20F:→ Amazonite96: ,Amortized 应该仍是O(1),有误欢迎指正 08/17 08:39
21F:→ aa06697: O(m+n)吧 但如果面试官说错的话 我会问他是因为hash coll 08/17 08:39
22F:→ aa06697: ision吗 08/17 08:39
23F:推 sooge: 不是线性的话就是nlogn了吧 面试官一定想到红黑树了 08/17 09:00
24F:→ yyc1217: 面试官搞错了 08/17 09:18
25F:推 eigen555: unordered map发生严重碰撞的话 搜寻的worst case 是 O( 08/17 09:40
26F:→ eigen555: m) 08/17 09:40
27F:→ eigen555: average case才是O(1) 08/17 09:41
28F:推 DarkIllusion: 面试官没解释自己的思路 感觉有点雷R 08/17 11:06
29F:推 zenithyoung: O(m+n) +1 08/17 11:28
30F:推 jass970991: 这面试官不太行啊 不过建议你可以问下数据大小 如果 08/17 13:09
31F:→ jass970991: 面试官说数据量很大 那你可以说有碰撞问题 如果不是 08/17 13:09
32F:→ jass970991: 那你可以选别家公司了 08/17 13:09
33F:推 pttano: 这间面试官程度太差了 08/17 18:19
34F:推 TheOneisNEO: 南港面过做手机的公司 主管也是坚持hash search not 08/17 18:39
35F:→ TheOneisNEO: O(1) 08/17 18:39
36F:推 Parazicecum: 面试官只是希望你说一下worst case而已吧 我感觉面试 08/17 21:22
37F:→ Parazicecum: 的时候被要求分别提一下worst case跟average case的 08/17 21:22
38F:→ Parazicecum: 情况还蛮常见的啊 08/17 21:22
39F:推 MyNion: O(n+m) +1,除非每一个插进HashSet的元素都杂凑碰撞 08/17 21:58
40F:→ MyNion: 才会让复杂度变成O(n*m) 08/17 21:58
41F:→ MyNion: 那面试官的主观意识感觉过强+不善沟通,雷雷的不去也罢 08/17 21:59
42F:→ cha122977: 也有可能是问worse case 或者现场的程式码不一样 08/17 22:49
43F:推 jolyoy: 已经在讨论时间复杂度了,应该都是用最基本的资料结构, 08/18 01:04
44F:→ jolyoy: 先入为主用unordered map来算,其实也有问题,一定是双方 08/18 01:04
45F:→ jolyoy: 没沟通清楚 08/18 01:04
46F:→ wulouise: 我觉得说人错,到最後都没给提示算是面试官问题 08/18 07:20
47F:推 Parazicecum: 我看过几本中国的面试刷题书 分析hash table的time 08/18 09:30
48F:→ Parazicecum: complexity都会要求面试者要特别提一下运气极差所有 08/18 09:30
49F:→ Parazicecum: key都collision的情况跟一般情况 我猜那个主管大概也 08/18 09:31
50F:→ Parazicecum: 是看过类似的书 所以预设你应该要回答.. 08/18 09:32
51F:推 s0914714: 沟通不良吧 如果如原PO所言 面试官责任较大 08/19 13:41
52F:推 s0914714: https://wiki.python.org/moin/TimeComplexity 08/19 13:44
53F:推 jlhc: 你的实作就是线性... 08/19 22:03
54F:→ jlhc: 面试官也是人 面试官搞错的可能性也是有的 08/19 22:04
55F:→ rems: 其实讨论Big O我觉得就是在讲worst case了 08/20 23:30
56F:→ rems: 我倒觉得科班出身念过演算法的会答linear time很奇怪... 08/20 23:32
57F:推 BBSealion: c++ 的 unordered_set 预设的 hash function 很容易造 08/21 19:33
58F:→ BBSealion: 出让他全部 collision 的状况,所以要更乾净还得自制 08/21 19:33
59F:→ BBSealion: 乱数更均匀的 hash function,但感觉上不是在考这个... 08/21 19:33
60F:→ BBSealion: 不过真遇到这种面试官自己搞不清楚状况的时候,就是把 08/21 19:34
61F:→ BBSealion: 你所有知道的底层知识都搬出来跟他讨论一遍就对了,看 08/21 19:35
62F:→ BBSealion: 是他会突然发现自己搞错,或是你突然打中他某个神秘的 08/21 19:35
63F:→ BBSealion: 想听得关键点,你就会过了 08/21 19:35
64F:推 imjeffreylee: M+n哪里不对 又不是nested loop 面试官不要不懂装懂 08/23 10:21
65F:→ imjeffreylee: 欸 08/23 10:21
66F:→ rems: 我只能说algorithm课本是好东西,可以多念一下 08/23 22:59
67F:→ rems: 要讨论实作这样写没什麽问题 08/23 22:59
68F:→ rems: 但是如果是要讨论time complexity回linear真的比较外行 08/23 23:00
69F:→ rems: 去查一下大O小o还有omega 08/23 23:01
70F:→ rems: big O就是在讨论worst case 08/23 23:02
71F:→ rems: 建立一组O(1)? 查询O(1)? 不懂不要装懂 08/23 23:03
72F:推 s0914714: 照楼上的说法 一堆排序例如quicksort应该是O(n^2) 08/24 07:52
73F:→ peter98: 回头看到这篇 rems是真的很外行 worst case跟big-O没什 12/03 04:48
74F:→ peter98: 关系 big-O也可以用在best case和avg case 12/03 04:49







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP