主线思路两个:
第一个用尽可能少bit位去编码
第二个把重复的字符进行处理
第一个用尽可能少bit位去编码
第二个把重复的字符进行处理
如果按照我们平常存文本的方式存储, 就算是用ASCII码,一个数字需要在硬盘上面占用8位bit位,
但是我们思考下, 0-9只有10个数字, 如果用ASCII码存储的话,会有浪费, 其实只需要4个bit位就可以存储一个数字啦, 4个bit位可以表示16种字符,而0-9只有10种,绰绰有余啦,
多余的6种我们记为 1010 1011 1100 1101 1110 11111 六种
通过使用4位bit位就可以少占用一半的空间啦
0 的二进制表示 0000
1的二进制表示 0001
其他的不列举了
我们再来分析下 一个简单的数字文本 22234345555232323123123123, 我们可以看见2连续重复了3次, 5连续重复了4次 23连续重复了3次, 123连续重复了3次
那我们可以使用 多余的六种 1010 代表单个字符重复
1011 代表两个字符重复
1100 代表3个字符重复
重复后面的4位代表重复的次数,最多可以匹配15次重复
那我们看看我们刚刚那个字符串可以编码生成:
222编码成 0010 1010 0011 不节约
5555编码成 0101 1010 0100 节约1位
232323 0010 0011 1011 0011 节约 2位
123123123 0001 0010 0011 1100 0011 节约4位
如果想去bat等一线互联网大厂的, 可以看看这个题目,虽然和测试没有多大关系,但是考擦你对计算机基础知识掌握牢不牢

探讨如何设计一个数字文本编辑器,仅允许输入0-9的数字,且不限长度,以实现最节省硬盘空间的保存方法。文章将涉及数据压缩、编码技术和存储效率等关键点。
2067

被折叠的 条评论
为什么被折叠?



