师大04研究生入学考试 一道数据结构题 ,望知者帮解.谢谢
组织大规模的语料库,需要设计高效率的存储方式。为了充分利用存储资源,请利用字节的位的运算方法("或", "与", "非"),用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




