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

[Leetcode] 复杂度和执行时间

全局:

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

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

x
平时我们在刷题的时候可以根据参数的大小来估算需要的复杂度。

但是这个估计是个相当粗糙的估计。因为语言的不同。假如用java或者golang来刷题,那么每句你写的line,都要被转化成机器语言。而这个转换率肯定和语言有关,也和调用内部程序有关。

今天我用的机器的CPU的频率(GHz):2.7。即每秒能够处理2_700_000_000机器指令。

今天用的语言是golang,那么虽然我只写了几十行代码lines,可我也估算不出来转化成机器指令会有多少行。

目前只能实测然后推导了。推导出的数字似乎也没有什么通用性,因为下次的指令可能不同。





上一篇:刷题-灰心【怀疑自己是否适合CS】
下一篇:Cracking the code interview 电子书
🔗
 楼主| 14417335 2019-7-8 10:50:19 | 只看该作者
全局:
在网上找到这个猜每秒执行多少iteration的

https://computers-are-fast.github.io/
回复

使用道具 举报

🔗
 楼主| 14417335 2019-7-9 09:56:18 | 只看该作者
全局:
  1. go tool compile -S main.go
复制代码

可以把30行的golang代码反汇编成大概400多行机器语言。

其中最关键的几个loop之一代码是19行
  1. "".merge STEXT size=405 args=0x48 locals=0x30
  2.         0x0096 00150 (main.go:19)        MOVQ        (R9), R11
  3.         0x0099 00153 (main.go:19)        MOVQ        (DX), R12
  4.         0x009c 00156 (main.go:19)        CMPQ        R11, R12
  5.         0x009f 00159 (main.go:19)        JGE        199
  6.         0x00a1 00161 (main.go:20)        CMPQ        R10, CX
  7.         0x00a4 00164 (main.go:20)        JCC        388
  8.         0x00aa 00170 (main.go:20)        MOVQ        R11, (AX)(R10*8)
  9.         0x00ae 00174 (main.go:21)        DECQ        R8
  10.         0x00b1 00177 (main.go:21)        MOVQ        R8, R11
  11.         0x00b4 00180 (main.go:21)        NEGQ        R8
  12.         0x00b7 00183 (main.go:21)        SARQ        $63, R8
  13.         0x00bb 00187 (main.go:21)        ANDQ        $8, R8
  14.         0x00bf 00191 (main.go:21)        PCDATA        $2, $4
  15.         0x00bf 00191 (main.go:21)        ADDQ        R9, R8
  16.         0x00c2 00194 (main.go:21)        DECQ        DI
  17.         0x00c5 00197 (main.go:21)        JMP        123
  18.         0x0184 00388 (main.go:20)        CALL        runtime.panicindex(SB)
  19.         0x0189 00393 (main.go:20)        UNDEF
  20.         0x018b 00395 (main.go:20)        NOP
复制代码





大概和1.73Sec的运行时间对上。当然这个对上可能是voodoo。

另外可以
  1. go test -bench=. -cpuprofile=/tmp/cprof
  2. go tool pprof -png /tmp/cprof
复制代码


来生成出一个break down。


回复

使用道具 举报

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

本版积分规则

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