CodeKata03:How Big? How Fast? 编程中的空间和时间问题

空间&时间:How Big? How Fast?

英文原文地址: http://codekata.com/kata/kata03-how-big-how-fast/

  粗略地估计是一种有用的才能,在编程中有时候需要你迅速大略地估计出数据结构的大小,循环的执行速度。越快地估计出这些,就会在编程中遇到越少的麻烦。
  做这样一个简单的练习:对于以下一系列问题,给出一个大致的答案。

存储空间

  • 以下数值用unsigned 表示,需要多少bits:
    1,000
    1,000,000
    1,000,000,000
    1,000,000,000,000
    8,000,000,000,000

  • 小镇有大约20,000住所。如果以字符形式存储,需要多大空间存储 姓名,地址,电话号码?

  • 我在二叉树存储了1,000,000 个整数 ,估计需要多少个节点和多少层?在32-bite 系统,需要多少空间?

运行速度

  • 英文水平有限,暂时没有搞清楚问题(My copy of Meyer’s Object Oriented Software Construction has about 1,200 body pages. Assuming no flow control or protocol overhead, about how long would it take to send it over an async 56k baud modem line?)
  • 二分查找算法花费4.5ms 去查找一个10,000个条目的数组,6ms 查找一个100,000ms的数组。预期需要花费多长时间去查找一个10,000,000个元素。(假设有足够内存防止页面置换)
  • Unix passwords 使用单向的hash函数存储: 原始字符串被转换为加密字符串,加密字符串不能被转换为原始的字符串。 一种攻击方式是产生所有可能的明文密码,应用hash获取密文并查验是否匹配。如果匹配,说明用来产生该密文的明文即是原来的密码(至少是和原来的密码一样可用的)。在特定系统,密码长度不大于16个字符,每个位置有96种可能。如果花费1ms产生一个hash,穷举攻击是不是可行?

猜你喜欢

转载自blog.csdn.net/u010679316/article/details/78231146
今日推荐