节省空间
简单性可以衍生出功能性、健壮性以及速度和空间。
问题:一个地理数据库中存储邻居的系统,一共有两千个邻居,编号范围为0-1999,每个邻居在地图中用一个点来描述。程序将选定的物理位置转换为0-199范围内的一对整数x和y,然后使用(x,y)对指定出用户选中了2000个点中那一个点(如果有的话),因为在同一个位置(x,y)不可能存在两个点,所以程序员仅需要考虑用200*200的点标识符数组表示地图的模块。
方法1:用200*200的数组表示,存在数据将数据放入数组,不存在数据给特定数据-1占用空间80KB
方法2:稀疏矩阵的一种前线的便是发就是使用数组标书所有的列,同时使用链表来表示给定列中的活跃元素。
Colhead row next
0 -> 2,17 ->
1 -> 1,98 ->
2 -> ->
搜索点(i,j)
For (p = colhead[i]; p != NULL; p = p->next)
If p->row == j
Return p->pointnum
Return -1
占用空间24800个字节
方法3:在不支持指针和结构的版本实现,使用一个201元的数组来表示这些列,并用两个2000元的平行数组表示这些点。
Pointnum[z]:17, 538, 1053, 98, 15, 1800,...
Row [y]: 2 , 5, 126, 1, 138, 11,...
Firstincol[x] :0, 3, 5, 5, ...
0 1 2 3 ...
数据空间技术
1.不存储,重新计算:以时间换空间
2.稀疏数据结构:消除存储同一对象众多副本的开销
3.数据压缩:32->16->8
4.分配策略:动态分配内存
垃圾回收: