Redian新闻
>
求查autocheck VIN:3VWCK31C35M413775
avatar
求查autocheck VIN:3VWCK31C35M413775# Automobile - 车轮上的传奇
h*2
1
先是写pow(x, n)
recursive和iterative哗哗哗写完了
面试官来了个,
What is the minimum number of multiplications for calculating pow(x, n)?
然后给我举了个例子,要算x^45
iterative的方法是
x --> x^2 --> x^4 --> x^8 --> x^16 --> x^32
然后把x, x^4, x^8, x^32 乘起来
总共需要5 + 3 = 8次乘法
recursive的方法是
x^45 = x^22 * x^22 * x
x^22 = x^11 * x^11
x^11 = x^5 * x^5 * x
x^5 = x^2 * x^2 * x
x^2 = x * x
这样也是需要8次乘法
但是有更好的办法是
x --> x^2 --> x^4 --> x^8
x * x^8 = x^9
x^9 --> x^18 --> x^36
x^9 * x^36 = x^45
这样只需要3 + 1 + 2 + 1 = 7次乘法
然后我就傻了。
查了下,这个问题还蛮出名:
https://en.wikipedia.org/wiki/Addition-chain_exponentiation
不过也太超出45分钟面试的范畴了吧……
虽然整个过程还挺和谐,走的时候人家还说了句最后那题是bonus, 心里还是惴惴不安
avatar
b*x
2
autocheck 请发送到x*******[email protected]
双簧包子答谢!多谢多谢!
avatar
m*h
3
不是log n 吗? 最后那个问题就相当于变向的问你时间复杂度吧
avatar
u*r
4
已发~
貌似车版不让单独发vin帖
avatar
q*l
5
不是标准的divide and conquer么。。。。
avatar
n*s
6
这就是只知道背题而不思考的结果。知其然不知其所以然。
思路很明显的是divide and conquer,但和普通的这类问题比,区别在于不用两边都算
, 只要算一边即可。
时间复杂度就是 T(n)=T(n/2)+c. 很容易推出T=O(logn)
avatar
h*2
7
楼上的在说话之前起码先去看看我给的链接好吗。
根本不是问时间复杂度,而是问具体到底多少次乘法是最少。二分法不能保证是最优的。
面试官当时给我举了个例子,
要算x^45
iterative的方法是
x --> x^2 --> x^4 --> x^8 --> x^16 --> x^32
然后把x, x^4, x^8, x^32 乘起来
总共需要5 + 3 = 8次乘法
recursive的方法是
x^45 = x^22 * x^22 * x
x^22 = x^11 * x^11
x^11 = x^5 * x^5 * x
x^5 = x^2 * x^2 * x
x^2 = x * x
这样也是需要8次乘法
但是有更好的办法是
x --> x^2 --> x^4 --> x^8
x * x^8 = x^9
x^9 --> x^18 --> x^36
x^9 * x^36 = x^45
这样只需要3 + 1 + 2 + 1 = 7次乘法
现在问题是,对于任意给定的n,怎么找到这个最优的方案?
avatar
f*w
8
wiki上不说了是NP-complete的么……而且DP也没办法解决
那面试官最后有没有说怎么做?
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。