CodeKata-How Big, How Fast?
2013-02-19 23:40 MichaelYin 阅读(241) 评论(0) 编辑 收藏 举报这次主要是训练的对于基本空间和时间复杂度的一些估计的思考,作者承诺一周后给出答案,不过到现在为止答案也木有见到,莫非是读者自己去讨论?
首先是对于十进制很大数字所占bit位的大致估计,只要知道2的十次方是1024,然后1024约等于1000,按照这个对比关系得出结果即可。
第二个题目是对于存储空间的估计,人名,地址,电话号码啥的大概多少位也不是个定数,自己估计下就行,单个字符的话如果是ASC码的话按照一个字节来处理(编码方式决定这里的字节数),最后得出大概的结果就行。
二分法查找的那个题目文章后面有评论给出了解法 ,不过我觉得这个解法是有问题的。它把两个之间通过一个比例关系来推导出最后结果所需要的时间,但是仔细分析,二分法的时间复杂度是lg2 n,所以这个方法是有问题的,正确的解法是
Time = Alg2(n) + B
时间和数目是这样一种关系,通过前面给出的两组数据恰好能算出A B 的值,这样就能对其他的情况进行类似推导。
UNIX密码的那个问题应该考虑到密码不一定是有16位,可能只有15 14位等等,这样所有的可能数加起来其实是一个等比数列,将其结果通过等比公式算出来后乘以每次HASH的时间数目然后查看最终结果是否符合要求。
整体看来题目难度不大,主要目的还是要求程序员对基础知识的掌握,对于基础的排序算法,数据存储以及基本的数学知识是一个优秀程序员必备的素质。