社区
数据结构与算法
帖子详情
高分求快速算法。
zgz
2002-06-25 03:50:06
请教一个快速算法,题目如下:
已知有一块缓冲区A,现在要求把缓冲区A中的数据每一个字节的低四位取出,
然后再合并成一个新的缓冲区B。
缓冲区A的大小为1M,那么缓冲区B的大小为512k。
例子:
缓冲区A中的数据:0x12,0x34,0x56,0x78,0x9a,0xbc...
转换后,缓冲区B中的数据:0x42,0x86,0xca,...
请给出数据转换的快速算法。
...全文
46
16
打赏
收藏
高分求快速算法。
请教一个快速算法,题目如下: 已知有一块缓冲区A,现在要求把缓冲区A中的数据每一个字节的低四位取出, 然后再合并成一个新的缓冲区B。 缓冲区A的大小为1M,那么缓冲区B的大小为512k。 例子: 缓冲区A中的数据:0x12,0x34,0x56,0x78,0x9a,0xbc... 转换后,缓冲区B中的数据:0x42,0x86,0xca,... 请给出数据转换的快速算法。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zgz
2002-06-26
打赏
举报
回复
或者:
for(i = 0; i < x/2; i++){
*pB++ = table[*pA++];
}
可以替换成:
char *pB_end = pB + x/2;
while(pB != pB_end){
*pB++ = table[*pA++];
}
to cyAnalyst(cc) : 用汇编写会更快么?c的效率已经很高了!
zgz
2002-06-26
打赏
举报
回复
受one_and_one启发,这个算法大家觉得如何?
char table[256*256];
int i;
for(i = 0; i < 256*256; i++){
table[i] = (i & 0x0f) | ((i & 0x0f00) >> 4);
}
short int *pA = (short int *)缓冲区a;
char *pB = (char *)缓冲区b
int x = 缓冲区a的长度;
for(i = 0; i < x/2; i++){
*pB++ = table[*pA++];
}
cyAnalyst
2002-06-26
打赏
举报
回复
如果真的需要,可以使用汇编。那是提高效率的最好方法。
one_add_one
2002-06-26
打赏
举报
回复
char *pB_end = pB + x>>1;
while(pB != pB_end){
*pB++ = table[*pA++];
}
要好些
one_add_one
2002-06-26
打赏
举报
回复
不错,不错。
如果你不嫌麻烦,用汇编也可以。
zgz
2002-06-25
打赏
举报
回复
to penu:
我这个缓冲区转换用在液晶驱动程序上,因此需要快速算法以获得更好的显示性能。
我的液晶显示器只有16级灰度(用四个bit代表一个点),而上层图形软件的绘图缓冲区是基于256级灰度(一个字节代表一个点),而cpu比较慢(30MHZ)为了更快地显示需要快速算法。
one_add_one的算法有点意思,用两次间接寻址替代了两次与、一次加和一次移位运算! Xcoder(流浪狗) 也不错。。。
还有没有更好的呀。。。?
Xcoder
2002-06-25
打赏
举报
回复
觉得one_and_one的那个以空间换时间的算法是很巧妙。
不过在这个问题上,因为每一步的操作并不复杂,而多重的寻址也是要花不少时间的,还是用我那个比较好。重新修改一下:
char* pa=A;
char* pb=B;
char* pend=pa+1024*1024;
for(;pa<pend;pa++,pb++){
*pb=(*pa & 0x0f) | (*(++pa) & 0x0f )<<4;
}
heiseloveyou
2002-06-25
打赏
举报
回复
思考中…………
penu
2002-06-25
打赏
举报
回复
这需要快速算法??想不通。。
penu
2002-06-25
打赏
举报
回复
这需要快速算法吗??想不通
one_add_one
2002-06-25
打赏
举报
回复
如果A非常大,那就只有用空间换时间。
main(){
int a[6]={0x12,0x34,0x56,0x78,0x9a,0xbc};
int b[3];
int t[256][256];
int i,j;
for (i=0;i<256;i++)
for (j=0;j<256;j++)
t[i][j]=((i & 0xf)<< 4) | (j & 0xf);
for (i=0;i<6;i+=2)
b[i>>1]=t[a[i+1]][a[i]];
}
one_add_one
2002-06-25
打赏
举报
回复
main(){
int a[6]={0x12,0x34,0x56,0x78,0x9a,0xbc};
int b[3];
int i;
for (i=0;i<6;i+=2)
b[i>>2]=((a[i+1] & 0xf)<< 4) + (a[i] & 0xf);
}
one_add_one
2002-06-25
打赏
举报
回复
main(){
int a[6]={0x12,0x34,0x56,0x78,0x9a,0xbc};
int b[3];
int i;
for (i=0;i<6;i+=2)
b[i>>2]=((a[i+1] & 0xf)<< 4) + (a[i] & 0xf);
}
lonk
2002-06-25
打赏
举报
回复
每次从A中读两个字节a,b,
生成新的c=(a<<4) | ((b<<4)>>4)....不过好象算不上什么快速酸法呵呵
Xcoder
2002-06-25
打赏
举报
回复
一个笔误,循环中应是:
*pb=(*pa & 0x0f) | ((*(++pa) & 0x0f )<<4);
Xcoder
2002-06-25
打赏
举报
回复
char* pa=A;
char* pb=B;
char* pend=pa+1024*1024;
for(;pa<pend;pa++){
*pb=(*pa & 0x0f) | (**(++pa) & 0x0f )<<4;
}
论文研究-基于IHS的
高分
辨率遥感影像自适应融合
算法
.pdf
该
算法
基于
快速
IHS变换,从亮度成份构成和空间细节注入程度两个方面加以改进,采用相关系数来调整权重,避免了人工指定权重带来的主观因素偏差,在提高影像空间细节和光谱保持之间取得了较好的均衡,同时还具备了高...
计算机组成原理唐朔飞
高分
笔记
适合考研的计算机组成原理,唐朔飞的
高分
笔记会帮你
快速
理解计算机组成原理,希望大家顺利通过
2021年软考网络工程师精华套餐(基础精讲+真题讲解+专题突破))
课程目标: 帮助学员顺利... 课程简介: 分章节分模块讲解重点技术,难点和考点,让学员学习知识的同时,
快速
学习考试技巧。课程图文并茂,重点突出。 2020年学员战绩,
高分
不断,最
高分
接近满分通过:
遗传
算法
工具箱(
高分
项目).zip
1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者
快速
实现各种复杂的数值计算
算法
。这些函数库提供了许多常用的
算法
和工具,可以大大...
Matlab中的一种非常
快速
的90 %矢量化NSGA-II
算法
.zip
1. 丰富的数学和科学函数库:Matlab提供了广泛的数学、信号处理、图像处理、优化、统计等领域的函数库,这些函数库可以帮助开发者
快速
实现各种复杂的数值计算
算法
。这些函数库提供了许多常用的
算法
和工具,可以大大...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章