社区
C++ 语言
帖子详情
哈希算法(急!在线等)
xsp919
2005-07-18 08:57:52
目前有一个很大的数组需要存储,但是ROM不够。所以需要压缩,数组中的需要存储的值有大写字母和数字还有几个符号。原来存储的是每个字符用8bit。现在想压缩到每个字符只用6bits。大家有什么好的方法可以实现吗?拜求!听说可以使用哈希算法。但是我不是很清楚。大家帮帮忙~~谢了:)
...全文
1068
15
打赏
收藏
哈希算法(急!在线等)
目前有一个很大的数组需要存储,但是ROM不够。所以需要压缩,数组中的需要存储的值有大写字母和数字还有几个符号。原来存储的是每个字符用8bit。现在想压缩到每个字符只用6bits。大家有什么好的方法可以实现吗?拜求!听说可以使用哈希算法。但是我不是很清楚。大家帮帮忙~~谢了:)
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
luhanwenboy
2005-08-03
打赏
举报
回复
回复:luhao007_noknife
你提出的方案应该是哈弗曼编码 ,编码的长度是不一样的,请怎样从ROM读取数组而又不引起二义?
ywchen2000
2005-08-03
打赏
举报
回复
HASH就是通过一个hash函数,计算字符的值,然后将值相同的放在一起.
LoveYouJustOneDay
2005-07-28
打赏
举报
回复
这个还要看你的数据
有些数据是不能压缩的
由信息熵决定
luhanwenboy
2005-07-28
打赏
举报
回复
看看每个字符的8bit中是否有2bit没用到。如果这2bit没用到(即这2bit都相同),就可以把字符拆成4个2bit插入到4个字符没用到的2bit中
kingbin
2005-07-19
打赏
举报
回复
补充一下,如果数组中字符的顺序有某种组合性,那么就可以有更高压缩率的算法
kingbin
2005-07-19
打赏
举报
回复
修正一下
最高频字符01然后001然后0001 ... 这里应该是
{01,001,011,0001,0011,0111 ...}
kingbin
2005-07-19
打赏
举报
回复
哈希表hash 只能提高数据的搜索速度,不能减少存储空间。
如果谈效率luhao007_noknife()谈的这个方法应该比较好的了,
{A...Z} 26个字符 + {0...9} 10个 如果剩下的字符不超过28个可以用6bit 最多存储64种类型
建立一个map,
压缩和解压分别是正逆转换map.
另外一种就是按照字符出现的频率,先写一个函数分析数组中每个字符出现频率
最高频字符01然后001然后0001 ...
这个算法可以获取更小的存储空间,可是需要one bit by on bit的分析,牺牲的是时间,效率没有前面的那个好
luhao007_noknife
2005-07-19
打赏
举报
回复
可以借鉴下BASE 64的算法。它就是建立了一个表。
因为你的符号和字母什么的一共家起来差不多有64个。
这样用6Bit就可以表示了。
比如A:000001,B:000010等等。
然后,把4个字符(总共24Bit么)拼成3个字符表示出来。
等你需要的时候,再把3个字符变回原来的那4个字符好了。
BASE 64的算法网上有很多,可以自己去找。
不过BASE 64不是压缩,是加长表示(即用字母和数字和几个字符表示所有字符)
是4个表示原来的3个。
你把它的反算法当做你的算法就可以了。
xsp919
2005-07-19
打赏
举报
回复
谢楼上的,我看看去。我也是这么想。只是不知道有什么更好的方法。自己想的总觉得不是很好。比较麻烦。
oyljerry
2005-07-19
打赏
举报
回复
主要根据数据的冗余度
shine51151
2005-07-19
打赏
举报
回复
厉害 等一下我也来问问
okdavinci
2005-07-19
打赏
举报
回复
利害.学习!
Jagen在路上
2005-07-18
打赏
举报
回复
zlib
boxban
2005-07-18
打赏
举报
回复
用现成的压缩库呀
shxchenwind
2005-07-18
打赏
举报
回复
一个字节8bit已经是操作最低的存储单元了!
蓄水池算法leetcode-leetcode-js-chimy:leetcode-js-chimy
蓄水池算法 leetcode leetcode-javascript-chimy 数据结构 1.数组 贪心算法 分支算法 动态规划算法 2.字符串 3.队列 4.链表 5.双指针 6.栈 7.堆 8。树 9.二叉搜索树 10.字典树 11.线段树 12.并查集 13.哈希表 14.图 基础算法 1.排序 2.递归 3.二分查找 4.回溯算法 5.位运算 6.分治算法 7.贪心算法 8.动态规划 9.广度优先搜索 10.深度优先搜索 11.Map 12.极大化极小 13.拓扑排序 抽象数学 1. 随机 2. 蓄水池抽样 3. 数学 4. 几何 5. 设计 6. 脑筋
急
转弯 字符串 数组 链表 队列 栈 排序 树 图 贪心算法 分治算法 回溯算法 动态规划
我的算法:我的数据结构和算法学习笔记
我的算法 我的算法学习笔记 数据结构 叠放 队列 链表 BinarySearchTree 组 地图 eep 段树 特里 联合查找 AVL树 红黑树 哈希表 图形 演算法 分类 气泡分选 选择排序 插入排序 贝壳分类 快速分类 合并排序 堆排序 计数排序 桶分类 基数排序 搜索 二进制搜索 插值搜索 顺序搜索 洗牌 递归的 贪婪 回溯 动态编程 图形 Leetcode 数组 回溯 二元搜索 比特操纵 脑筋
急
转弯 违规优先搜索 深度优先搜索 设计 动态编程 图形 贪婪 哈希表 堆 链表 数学 段树 滑动窗口 分类 叠 串 树 特里 两分球 工会发现 质量检查 评判 代码写 差异
java数据结构算法
稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题...哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS...
蓄水池算法leetcode-leetcode-cn.go:leetcode-cn.go
蓄水池算法 leetcode leetcode-cn.go 数组 267 动态规划 213 数学 190 字符串 187 树 155 深度优先搜索 132 哈希表 132 二分查找 92 贪心算法 78 广度优先搜索 74 双指针 70 栈 64 并查集 30 分治算法 28 Sliding Window 24 递归 23 字典树 18 线段树 12 Ordered Map 10 队列 10 几何 9 极小化极大 8 树状数组 6 Line Sweep 6 Random 6 拓扑排序 6 二叉搜索树 5 脑筋
急
转弯 5 记忆化 3 Rejection Sampling 2 蓄水池抽样 2
蓄水池算法leetcode-tech_interview_prep:技术面试准备
蓄水池算法leetcode 技术面试准备计划 从零开始学习数据结构和算法 如何: 数据结构:记笔记,画概念 此数据结构的算法:记笔记,绘制概念 从零开始实现数据结构及其算法 实施例程: 阅读问题说明 编写单元测试:极端情况、一般用法、压力测试 设计问题解决方案 在IDE中编写代码 测试一下 工具: 单元测试系统 瓦尔格林德 调试 探查器 模块: 大批 堆 队列 德克 链表 堆 递归 优先队列和不相交集 哈希表 树木 贪心算法 分而治之 排序和搜索 动态规划 图形 细绳 线性规划 NP完全 在 LeetCode 上练习解决问题 如何: 学习新技术的概念,如果它是新的:记笔记,画概念 为每个模块解决 15 个问题\技术:5 容易,5 中等,5 困难 实施例程: 阅读问题说明 编写单元测试:极端情况,一般用法 设计问题解决方案 在纸上写代码 用单元测试测试它 在IDE中编写压力测试 在IDE中编写解决方案 测试一下 技巧: 两个指针 回溯 滑动窗口 极小极大 随机的 拒绝抽样 水库采样 背诵 脑筋
急
转弯 几何学 组合学 数学 位操作 动态规划 分而治之 贪婪的 模块: 大批 细绳 树 哈希表
C++ 语言
64,685
社区成员
250,491
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章