CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

师大04研究生入学考试 一道数据结构题 ,望知者帮解.谢谢

楼主zhyindividual(空幻闲人)2006-06-03 12:49:25 在 C/C++ / C语言 提问

组织大规模的语料库,需要设计高效率的存储方式。为了充分利用存储资源,请利用字节的位的运算方法("或",   "与",   "非"),用3个字节同时包含下列信息:(1)一个汉字(2字节);(2)这个汉字记录的词的词性(假设所有的词性最多不超过16种,每个词只有一个词性);(3)这个汉字是多音字还是不多音字  
   
  怎么实现这个目标?方法是什么? 问题点数:100、回复次数:29Top

1 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-03 13:34:31 得分 3

感觉就是一个编码的思想...  
  huffman   好象不能作到,不过可以试一试!Top

2 楼chenhu_doc(^0^纯一狼^0^ 看书看到大笑,直到不能自已)回复于 2006-06-03 13:44:02 得分 5

1)一个汉字(2字节);  
  (2)这个汉字记录的词的词性(假设所有的词性最多不超过16种,每个词只有一个词性);  
  (3)这个汉字是多音字还是不多音字  
   
  ------------  
  根据需求分配一下每条信息的大小,然后还用的上什么code   and   encode   的算法!Top

3 楼jixingzhong(瞌睡虫·星辰)回复于 2006-06-03 13:47:22 得分 2

hoho   ,  
  基本就是   信息隐藏   的思想,  
  信息隐藏技术现在也发展的不错了,  
  解决这个问题   从信息隐藏技术   角度去考虑不复杂。  
   
  不过似乎这个问题不需要这么麻烦   ......Top

4 楼zhyindividual(空幻闲人)回复于 2006-06-03 13:48:05 得分 0

我个人对语料库不甚了解,还有相关经验的朋友给予解惑为盼.  
  最好是予以详细的说明与解释.谢谢Top

5 楼wangyuanchuang(元创)回复于 2006-06-03 13:48:18 得分 4

如果光从题目来说  
  定义一个结构不就行了吗?  
  用一个unsigned的后16位做词性,第17位做标识多音。Top

6 楼sarh2os()回复于 2006-06-03 13:48:59 得分 5

定义一个三个字节的类型,如:  
  typedef   char   A[3];  
  这三个字节按照题目要求进行如下安排:  
  头两个字节存储汉字的编码,最后一个字符的高四位(正好可以表示16个状态)存储词性,低四位(也可以表示16个状态)存储是否多音字(其实只有两个状态,是或不是)。  
   
  取数的时候据按位与或者按位或就行了:)  
  Top

7 楼jixingzhong(瞌睡虫·星辰)回复于 2006-06-03 13:49:43 得分 5

现在看的   信息隐藏中的   数字水印技术多一些,  
  而且主要是图像方面的,  
  对于楼主提到的这类文本、字串倒是不多   ....  
   
  不过应该适用一些   图像水印中的   空域水印算法   ...Top

8 楼jixingzhong(瞌睡虫·星辰)回复于 2006-06-03 13:56:55 得分 5

居然是   3   字节   ...  
  还以为是   2   字节的   ...  
   
  3   字节那简直就   ...可以直接保存了啊   ...     寒   ...  
   
  汉字   用UNICODE编码,2字节,  
  剩余一个字节,省下的信息完全足够:字节记为A  
  最后一位   保存多音节信息   0/1   ==   是或不是   ,A&0x1获取该位;  
  第二位到第五位为   词性信息   0-15   为16个状态,   A>>1   获取词性信息;  
  高3位保留即可   ...Top

9 楼zhyindividual(空幻闲人)回复于 2006-06-03 13:57:48 得分 0

To:sarh2os()>>  
  能否给较详细的解释?  
  能给出示范代码更好了.谢谢Top

10 楼laiwusheng(风清扬)回复于 2006-06-03 14:05:46 得分 5

定义这样一个结构体  
  struct   words  
  {unsigned   word   :8      
    unsigned   character   :4;  
    unsigned   msc   :1;      
  }wordlib;Top

11 楼ywhbn(天涯)回复于 2006-06-03 14:21:41 得分 5

还是多买几块硬盘吧,现在硬盘这么便宜。这样可以加快检索速度,方便维护,方便程序设计。Top

12 楼LoveVV99(LoveVV)回复于 2006-06-03 14:32:32 得分 5

修改一下laiwusheng(萧剑)兄的:  
  struct   words  
  {  
    unsigned   char   character[2];      
    unsigned   property   :4;  
    unsigned   msc   :1;      
  }wordlib;  
  Top

13 楼hslinux(幻世龙)回复于 2006-06-03 15:08:50 得分 5

呵呵,太高深了,看不懂什么意思,如果是3字节保存那些条件的话是很好实现的,2字节保存汉字,剩下的那个字节按位存储:0x11111111,,高4位保存是多音字还是不多音字(浪费了,1位就够了,HOHO~~~),低四位保存词性。Top

14 楼zhyindividual(空幻闲人)回复于 2006-06-03 17:26:56 得分 0

感谢各位朋友的回答.  
  恕我笨拙:  
  如果作为一个回答此题目的完整答案是什么呢?  
  包括理论与示例的代码.当然,完整的代码又是什么呢?  
  譬如说:   "人"   字,   有5个词性,非多音字,怎么处理?Top

15 楼zhounw()回复于 2006-06-04 10:49:12 得分 5

typedef   struct  
  {  
          unsigned   short   ucs_word;       //   汉字的UNICODE码  
          unsigned   char   property;         //   汉字的词性和是否多音节  
  }   WORD_T  
   
  WORD_T   word;  
  词性:    
  word.property   &   0x0F           //   低四位表示词性  
  是否多音节:  
  word.property   &   0x10           //   第五位表示是否多音节  
  Top

16 楼Jedimaster(CRH = 耻辱号)回复于 2006-06-04 15:02:42 得分 5

如果更要求直观用bitsetTop

17 楼1073X(爱着未知数)回复于 2006-06-04 19:34:07 得分 5

如果一个字只有一种词性,至多16种词性用4BIT就可以表示了;还有4BIT可以用来做声调的标志,四声嘛,一位表示一个声调。  
  如果一个字有多个词性就比较复杂了,本人不甚了解。不过相信用前面网友发言里提到的code/encode技术可以解决.Top

18 楼1073X(爱着未知数)回复于 2006-06-04 19:37:30 得分 5

补充一下  
  "人"  
   
  前两字节为字的编码  
  0Xxxxx  
  0Xxxxx  
  0X0080(00表示名字,0x80   =   b0100表示2声)Top

19 楼gabby1985(咖啡)回复于 2006-06-04 23:42:09 得分 3

我们学校的题哈~~        
   
  顶一个先.....Top

20 楼hbyufan()回复于 2006-06-05 00:38:10 得分 3

顶顶啊  
  Top

21 楼kwokwinglau(每天前进1%)回复于 2006-06-05 08:24:55 得分 5

本题的要求就是编码和解码.Top

22 楼kwokwinglau(每天前进1%)回复于 2006-06-05 08:27:07 得分 5

题目说了,一个字只有一个词性,人字就算有五个词性,也不作考虑.Top

23 楼eqxu(天使联盟)回复于 2006-06-05 08:57:03 得分 5

修改一下:  
  struct   words  
  {  
    unsigned   short   ucs_word;//unicode    
    unsigned   char   msc   :1;//多音  
    unsigned   char   reserve   :3;//保留  
    unsigned   char   property   :4;//属性  
  };  
   
  Top

24 楼zhyindividual(空幻闲人)回复于 2006-06-08 13:19:46 得分 0

感谢各位的回答,不过我希望看到完整而详尽的对题目的解决答案.  
   
  就譬如说.如果作为一场入学考试的题目,您会怎样予以解答.  
   
  我还等一天,希望有哪位朋友能耐心地帮我解解惑:)Top

25 楼sonald(第六指)回复于 2006-06-08 14:15:00 得分 5

0000   0000   0000  
  1234   5678   9abcTop

26 楼zhyindividual(空幻闲人)回复于 2006-06-08 16:13:55 得分 0

有朋友给个详细的解答不?Top

27 楼zhyindividual(空幻闲人)回复于 2006-06-10 20:49:06 得分 0

???没有朋友给个完整详细的答案??Top

28 楼crazy_lazy_pig(疯狂懒猪)回复于 2006-06-10 21:04:58 得分 5

我也不给详细的解答了,麻烦,就给个思路(与前面的都不同)  
   
  (不过我的思路不用位运算.   因为我感觉这道题目还是太简单了,用位运算反而增加了其复杂性.)  
   
  因为汉字编码就占用两字节(不论unicode还是其他),所以我们就把前两个字节那来存贮汉字.  
  剩下的一个字节表示词性和多音属性,该字节所表示的整数为正表示单音,负表多音,其绝对值对应某种词性(0不被使用).Top

29 楼1073X(爱着未知数)回复于 2006-06-17 13:36:23 得分 0

位运算是CPU处理最快的操作之一,建议还是使用位运算Top

相关问题

关键词

得分解答快速导航

  • 帖主:zhyindividual
  • chenhu_doc
  • chenhu_doc
  • jixingzhong
  • wangyuanchuang
  • sarh2os
  • jixingzhong
  • jixingzhong
  • laiwusheng
  • ywhbn
  • LoveVV99
  • hslinux
  • zhounw
  • Jedimaster
  • 1073X
  • 1073X
  • gabby1985
  • hbyufan
  • kwokwinglau
  • kwokwinglau
  • eqxu
  • sonald
  • crazy_lazy_pig

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo