一个《编程珠玑》中的问题

hanb99 2008-10-16 08:52:28
在这本书的P6页中:
我们可以使用一个20位的字符串表于一个小型的小于20的非负整数集合,例如:{1,2,3,5,8,13}可以存储在下面的字符串中:01110100100001000000
集合中代表数的各个位设为1,其它位置为0。
------------------------------------
这样的表示方法不太懂,它是如何设置又是如何还原的呢?指高人指点一下。
...全文
112 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenzhp 2008-10-16
  • 打赏
  • 举报
回复
来学习
hanb99 2008-10-16
  • 打赏
  • 举报
回复
哦,是不是在这个集合中有几(如15),那么字符串的第14位(从零开始)就是1,其它也如此。
mifeixq 2008-10-16
  • 打赏
  • 举报
回复
这个表示方法就是20位的字符串

如果集合中有数字几,就在第几位上置1

如集合{1,2,3,5,8,13}有1 则第一位(注意,该字符串适从0开始到19结束)写1
就是


01...(0位写0,1位写1),同理,有2,则第2位写1
011... 有3 则
0111...
于是该集合就对应字符串
01110100100001000000
123 5 8 13
nicholasfly 2008-10-16
  • 打赏
  • 举报
回复
up
没明白……
Nobody_Linux 2008-10-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 mifeixq 的回复:]
这个表示方法就是20位的字符串

如果集合中有数字几,就在第几位上置1

如集合{1,2,3,5,8,13}有1 则第一位(注意,该字符串适从0开始到19结束)写1
就是


01...(0位写0,1位写1),同理,有2,则第2位写1
011... 有3 则
0111...
于是该集合就对应字符串
01110100100001000000
123 5 8 13
[/Quote]

正解
hanb99 2008-10-16
  • 打赏
  • 举报
回复
谢谢mifeixq
LiTuX 2008-10-16
  • 打赏
  • 举报
回复
我觉得貌似应该不是用“字符串”的吧?

——要想节约内存,直接将各个比特设置成1来表示多好?

(这么做有意义吗?要一个这样的集合,干什么使唤??)

xtdumpling 2008-10-16
  • 打赏
  • 举报
回复
up
mifeixq 2008-10-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 hanb99 的回复:]
哦,是不是在这个集合中有几(如15),那么字符串的第14位(从零开始)就是1,其它也如此。
[/Quote]
就是第15位~~他表示不了20…… 上面也说了是小于20的集合……

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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