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,穷举攻击是不是可行?
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值