为什么在暴力遍历中,为什么数组转字典是优化计算速度?

2020-12-18 09:04:33 +08:00
 xzour
自己数据结构比较薄弱,但我没想通 ArrayList<T> or List<T> 会比 Dic<int,T>慢? 联动前贴: https://www.v2ex.com/t/736445
4348 次点击
所在节点    程序员
31 条回复
zhlssg
2020-12-18 11:59:46 +08:00
@weixiangzhe 为啥你这时间复杂度和 3l 不一样啊
weixiangzhe
2020-12-18 12:01:01 +08:00
@zhlssg 我看成双层 for 循环了
Nerv
2020-12-18 12:38:17 +08:00
买本算法第四版,各种复杂度给你分析得透透得
tlday
2020-12-18 13:10:51 +08:00
这个帖子是完美的 X-Y 问题的例子。
建议回答的人先去看看楼主贴出的原帖,在"""""""暴力遍历"""""""(加粗加重)中,数组转字典可以优化计算速度是不存在的。

什么是 X-Y 问题: https://coolshell.cn/articles/10804.html
tlday
2020-12-18 13:15:50 +08:00
看了这么多楼都给我整懵了,看了原帖才发现,根本不是这么回事儿。
Still4
2020-12-18 13:25:46 +08:00
遍历每个客户
读取该客户的收款及发票
遍历收款,取发票一条一条核销,一条销完,换另一张发票,未销完,记录发票 INDEX 及剩余金额
最后将结果批量插入数据库。 大概 6000 多条核销明细花了我 30 分钟+ 不可忍受。

看了原贴,根源在于第二步和第三步有过滤
以第二步为例,你要遍历每个客户的数据,对应主楼的 arr2 和 map2 会进行筛选,当然是 map 更快
jimliang
2020-12-18 15:38:35 +08:00
一看就没学过数据结构的,转 Dic 的复杂度为 n,以后每次获取的复杂度就是 1 了。
wangchonglie
2020-12-18 16:56:49 +08:00
@tlday #24 感谢让我学会了什么叫 X-Y 问题
fishenal
2020-12-18 17:21:11 +08:00
我这个半调子程序员都知道,字典是 hash table,hash table 就是把值做 hash,放到 hash 过后这个内存位置,直接去寻址就找到了,array 遍历至少 o ( n )
786375312123
2020-12-18 18:26:08 +08:00
hash table 的底层实现也是 array 。
你的问题描述有点问题
raaaaaar
2020-12-18 18:43:25 +08:00
@tlday #24 我今天才和别人说类似的情况,不过没有术语这么精准,没想到自己就完美体验了一次。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/736615

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX