!!不是很难,想求一个好一点的算法。谢谢大家

sonyg 2006-04-10 02:23:24
一个给定的256Bit的数组
FF... B A 9 8 7 6 5 4 3 2 1 0-----(Index)
1 ... 0 1 0 0 1 1 0 1 0 1 0 0-----(Content)

要求:
(1)Content转化为Index
输入1,输出2 (第一个1的Index是2)
输入2,输出4 (第二个1的Index是4)
输入3,输出6 (第三个1的Index是6)
输入4,输出7 (第四个1的Index是7)
输入5,输出10 (第五个1的Index是10)
……

(2)Index转化为Content
输入0,输出Error (Index0 内容是0)
输入1,输出Error (Index1 内容是0)
输入2,输出1 (Index2 内容是第一个1)
输入4,输出2 (Index4 内容是第二个1)
输入6,输出3 (Index6 内容是第三个1)
输入7,输出4 (Index7 内容是第四个1)
输入10,输出5 (Index10 内容是第五个1)
……

首先要求速度,其次是再考虑内存。(最好是比那种“从头到尾循环数个数“要优秀的算法)
...全文
128 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
GoldWood 2006-04-14
  • 打赏
  • 举报
回复
算法并不是纯粹的数学公式,也代表模型,2楼给的是一个模型,我是这样认为的,呵呵
booklove 2006-04-10
  • 打赏
  • 举报
回复
还是查表快,就用二楼的方法,你每次数据变得时候也更新表的内容。
只要你给定数组的变化不是跟查询一样频繁,就赚了。
一条晚起的虫 2006-04-10
  • 打赏
  • 举报
回复
只要其中一个字节需要做&运算,其他不用的(BYTE[0]& 0xff = BYTE[0]),:)
一条晚起的虫 2006-04-10
  • 打赏
  • 举报
回复
256bit存入8BYTE,根据输入的位数,与这8个BYTE作&,(输入10,BYTE[0] & 0xff , BYTE[1] & 0x3,剩下的不用管了),然后查表(0-f就够了),相加。
不知道会不会比移位数1快。
sonyg 2006-04-10
  • 打赏
  • 举报
回复
我是楼主

不好意思,忘了说了,给定的256Bit的数组也是随机的,只是在一段时间内固定。

定义一个数组,存放每个1的位置,的确是挺快的,不过感觉有点不象是算法的样子……

不好意思。
cpio 2006-04-10
  • 打赏
  • 举报
回复
如果你不是很频繁地查询的话,就循环就行了

如果查询很频繁

可以定义一个数组,存放每个1的位置

假如有100个1,可以定义byte *index = new byte[100];

然后为每个1指定位置
index[0] = 2;
index[1] = 4;
index[3] = 6;

这样要查询第n个1时,直接取index[n-1]的值

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧