求zu

雕公 2012-03-13 10:26:40
#include <base.h>
int init(void)
{
int a,d,g,j,w;a=0;d=160;g=5;for(j=1;j>0;j++){w=j+j;dline(w,d,g+w,d,111,11,1);dline(g+w,d-g,g+g+w,d,1,11,111);dline(g+w,d+g,g+g+w,d,1,11,111);if((g+g+w)>239){j=1;a++;if(a>4){exit();};};
ref(0,155,240,165);
cls(11,111,1);}
return 0;
}

int event(int type, int p1, int p2)
{
if(KY_DOWN == type)
{
switch(p1)
{
case _SRIGHT:
exit();
break;
case _1:
break;
}
}

return 0;
}

int pause(void)
{
return 0;
}

int resume(void)
{
return 0;
}
int exitapp(void) {
exit();
return 0;
}
这个程序怎么能在他话箭头是,也就是在for循环是响应键盘事件以随时退出啊?我都只能if(a>4){exit();};};让它到了几次后退出,还有类是的:这个是会来回的箭头,也是不知道怎么退出,只好在循环里计数,到if(o>6){exit();};是退出,钥匙能随时按键就退出就好了。

#include <base.h>
int j;int o;
void y(void){while(++j){dline(j*5,160,j*5+10,160,1,11,111);dline(j*5+5,155,j*5+10,160,1,11,111);dline(j*5+5,165,j*5+10,160,1,11,111);ref(0,0,240,320);cls(255,255,255);char tt[30];sprintf(tt,"j=%d,o=%d,?=%d",j,o,getmemremain());dtext(tt,80,80,22,88,176,0,1);if(j>22&&j<24){o++;};if(o>6){exit();};if(j*5+10>240){z();};;};}
void z(void){while((1)){dline(j*5+10,160,j*5-4,160,1,11,111);dline(j*5+5,165,j*5-4,160,1,11,111);dline(j*5+5,155,j*5-4,160,1,11,111);char tt[30];sprintf(tt,"j=%d,o=%d,o=7时将退出!",j,o);dtext(tt,40,80,22,88,176,0,2);ref(0,0,240,320);cls(255,255,255);j--;if(j>20&&j<22){o++;};if(j<1){shake(1);y();};}}
int init(void)
{j=0;o=0;
y();/*if(o>4){break;};*/
return 0;
}
int event(int type, int p1, int p2)
{
if(KY_DOWN == type)
{
switch(p1)
{
case _SRIGHT:
exit();
break;
case _1:
break;
}
}

return 0;
}

int pause(void)
{
return 0;
}

int resume(void)
{
return 0;
}
int exitapp(void) {
exit();
return 0;
}
最后是一个生命游戏,我的手机用这个10乘10的不会死机,30的都会四,同样是在循环里记数才可以推出,求高手交怎么响应能够键盘,不等循环完就break;
#include <base.h>
int init(void)
{int a[10][10],d[10][10],j,m,p,g;
cls(10,20,30);
for(j=0;j<9;j++){for(m=0;m<9;m++){a[j][m]=1;
dpointex(m+70,j+120,255,255,255);ref(30,30,100,100); }}
for(p=1;p<10;p++){
for(j=1;j<9;j++){
for(m=1;m<9;m++){

g=a[j-1][m-1]+a[j-1][m]+a[j-1][m+1]+a[j][m-1]+a[j][m+1]+a[j+1][m-1]+a[j+1][m]+a[j+1][m+1];
switch(g){
case 3:a[j][m]=1;d[j][m]=a[j][m];dpointex(70+m,120+j,255,255,255);
case 2:d[j][m]=a[j][m];break;
default:a[j][m]=0;d[j][m]=a[j][m];dpointex(m+70,j+120,0,0,0);}
ref(30,30,100,100);}}}
return 0;
}
int event(int type, int p1, int p2)
{
if(KY_DOWN == type)
{
switch(p1)
{
case _SRIGHT:
exit();
break;
case _1:
exit();
break;
}
}

return 0;
}

int pause(void)
{
return 0;
}

int resume(void)
{
return 0;
}
int exitapp(void) {
exit();
return 0;
}

有空的看看,帮忙接下,谢了。
...全文
148 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
雕公 2012-03-14
  • 打赏
  • 举报
回复
#ifndef _MRC_SOUND_H_
#define _MRC_SOUND_H_



#define ACI_MIDI_DEVICE 1
#define ACI_WAVE_DEVICE 2
#define ACI_MP3_DEVICE 3
#define ACI_AMR_DEVICE 4
#define ACI_PCM_DEVICE 5
#define ACI_M4A_DEVICE 6
#define ACI_AMR_WB_DEVICE 7


typedef void (*ACI_PLAY_CB)(int32 result);

typedef struct
{
int32 pos;
}T_DSM_AUDIO_POS;

/*
每次播放前需调用
[in]:播放设备类型ACI_MIDI_DEVICE-ACI_AMR_WB_DEVICE
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_playSoundExInit(int32 type);
/*
加载音频文件
注意:该方法下resume时手机会有问题,后续移植版本解决,建议将
文件写入T卡然后mrc_playSoundExLoad加载
[in]
type:设备类型
data:输入数据
buf_len:数据长度
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_playSoundExLoad(int32 type, const void * data, int32 buf_len);
/*
加载音频文件
[in]
type:设备类型
filename:数据文件名称,相对路径,GB编码,这里注意的是从mrp外部读取文件
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_playSoundExLoadFile(int32 type, char* filename);
/*
播放音频文件
[in]
type:设备类型
block:1:阻塞式向底层发送播放请求;0:非阻塞凡是向底层发送播放请求
loop:0:单次播放;1:循环播放;2:nes pcm 播放方式
cb:回调函数 ,无则填NULL
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_playSoundEx(int32 type, int32 block, int32 loop, ACI_PLAY_CB cb);

/*
暂停播放音频文件
[in]
type:设备类型
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_pauseSoundEx(int32 type);
/*
继续播放音频文件
[in]
type:设备类型
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_resumeSoundEx(int32 type);
/*
停止播放音频文件
[in]
type:设备类型
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_stopSoundEx(int32 type);
/*
关闭设备
[in]
type:设备类型
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_closeSoundEx(int32 type);
/*
音量调节
[in]
volume:音量大小0~5
[return]: MR_SUCCESS 初始化成功
MR_FAILED 初始化失败
MR_IGNORE 不支持该功能
*/
int32 mrc_setVolume(int32 volume);

int32 mrc_getSoundTotalTime(int32 type, uint8** p);
int32 mrc_getSoundCurTime(int32 type, uint8** p);
int32 mrc_getSoundCurTimeMs(int32 type, uint8** p);
#endif
这是mrc的sound.h,下面的是封装后的:
#ifndef _MRC_SOUND_H_
#define _MRC_SOUND_H_

/*
此文件为系统内部封装的函数实现了MRPAPI库<mrc_sound.h>的部分功能
本文件只相当于帮助文件,没有任何实际意义,也就是说在这里增加或修改定义不会有任何效果
如果你需要增加定义,请定义在其他文件中,要使用以下所有接口请在你的代码中增加“#include "base.h"”和“#include "sound.h"”
*/



//系统没有预先定义以下两个结构
enum{
_MIDI=1,
_WAVE,
_MP3,
_AMR,
_PCM,
_M4A,
_AMR_WB
};

typedef struct
{
int32 pos;
}T_DSM_AUDIO_POS;




/*
每次播放前需调用
[in]:播放设备类型_MIDI-_AMR
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 soundinit(int32 type);

/*
加载音频文件
[in]
type:设备类型
filename:数据文件名称,相对路径,GB编码,这里注意的是从mrp外部读取文件
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 soundloadfile(int32 type, char* filename);
/*
播放音频文件
[in]
type:设备类型
block:1:阻塞式向底层发送播放请求;0:非阻塞凡是向底层发送播放请求
loop:0:单次播放;1:循环播放;2:nes pcm 播放方式
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 soundplay(int32 type, int32 block, int32 loop);

/*
暂停播放音频文件
[in]
type:设备类型
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 soundpause(int32 type);
/*
继续播放音频文件
[in]
type:设备类型
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 soundresume(int32 type);
/*
停止播放音频文件
[in]
type:设备类型
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 soundstop(int32 type);
/*
关闭设备
[in]
type:设备类型
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 soundclose(int32 type);
/*
音量调节
[in]
volume:音量大小0~5
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 setvolume(int32 volume);

/*
获取音乐的总时间秒S
[out]
p:指向这个数据结构(T_DSM_AUDIO_POS)的指针的指针,
这个数据结构的值就是总的时间
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能

注:mtk上此接口在以文件形式播放的时候有效。
*/
int32 getsoundtotaltime(int32 type, uint8** p);

/*
获取当前已经播放的时间秒S
[out]
p:指向这个数据结构(T_DSM_AUDIO_POS)的指针的指针,
这个数据结构的值就是已经播放的时间
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能

注:mtk上此接口在以文件形式播放的时候有效。
*/

int32 getsoundcurtime(int32 type, uint8** p);


/*
获取当前已经播放的时间毫秒ms
[out]
p:指向这个数据结构(T_DSM_AUDIO_POS)的指针的指针,
这个数据结构的值就是已经播放的时间
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能

注:mtk上此接口在以文件形式播放的时候有效。
*/

int32 getsoundcurtimems(int32 type, uint8** p);

/*
设置播放位置,相对文件或者缓冲的起始位置的偏移量
[IN]
SOUND_POS pos:相对文件或者缓冲的起始位置的偏移量
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 setplaypos(int32 type,T_DSM_AUDIO_POS* pos);

/*
设置播放时间,相对文件或者缓冲的起始时间的偏移量
[IN]
SOUND_POS pos:相对文件或者缓冲的起始时间的偏移量,单位:ms
[return]: 0 初始化成功
-1 初始化失败
1 不支持该功能
*/
int32 setplaytime(int32 type,T_DSM_AUDIO_POS* pos);

/*
获取当前设备的状态
[IN]

[return]
设备状态值 成功
-1 初始化失败
1 不支持该功能

*/
int32 getdevicestate(int32 type);
#endif
雕公 2012-03-14
  • 打赏
  • 举报
回复
我是在手机上运行的,不是在电脑上.另,手机上的冒泡实验开发系统只封装了mrc-base.h和mrc-ctype.h以及mrc-sound.h等有限的几个头文件,我想写个给力猫的应用,但封装的sound.h里没有。要mrc-exb.h里才有录音的函数,但我直接include mrc-exb.h却说打不开该文件,所以我想象base.h是mrc-base.h那样动下手脚,看看能不能用录音的函数,可惜看不懂原文件与封装后的文件到底改了些什么,只知道封装后的函数是简写的,可以加快在手机上的输入速度,毕竟要打的字少了;还有的函数似乎改写了一下参数,把数据结构的参数改为直接的参数,比如颜色,原来是colorex的一个结构,现在就直接用int r,int g,int b来代替~~~难道手机上的c是功能限制版?搞不懂啊,我手机上下有电脑上使用的sdk,里面的以mrc开头语的头文件有好多个,怎么样才可以在手机上使用啊?直接include为什么控制台说打不开文件?

  • 打赏
  • 举报
回复
ctrl+c试试
oldm4n 2012-03-13
  • 打赏
  • 举报
回复
看的眼晕
在dline里面处理event,for里面调用dline的地方判断返回值,匹配event的就退出
疯狂五笔输入法,用拼音打五笔,包含GB2312国标全部用字,整齐划一,没有重码。 李mzo=木m+子zo 红sgo=纟s+工go 1、字根 字根由拼音加特征组成 火=火h+人r 取火拼音huo的第一个字母,取火中间特征人拼音ren的第一个字母r。 2、拼音简化 拼音zh简化为a 拼音ch简化为i 拼音sh简化为u 拼音yu简化为v ag竹=竹a+个g ui石=石u+厂i iq车=车i+七q vw玉=玉v+王w 3、五笔基本字根 一h=横、提 丨u=竖 丿p=撇 丶d=点、捺 乛a=折、弯 4、编码方法 编码方法有三种。字根占空间较大的用两个字母,字根占空间较小的用一个字母。钅木氵艹亻口扌忄纟开头的字根,只用一个字母。 第一+第二 对于上下结构和左右结构都是独立字根的汉字适用此方法 钅木氵艹亻口扌忄纟码长3=1+2 其它码长4=2+2 只kbd=口k+八bd 赵zoyp=走zo+乂yp 第一+第二+最后 对于上独立字根+下复合字根结构和左独立字根+右复合字根结构的汉字适用此方法 钅木氵艹亻口扌忄纟码长4=1+1+2 其它码长4=2+1+1 莅crlo=艹c+亻r+立lo 恒xohh=忄xo+一h+一h 第一+倒数第二+最后 对于上复合字根+下独立字根结构和左复合字根+右独立字根结构的汉字适用此方法 码长4=1+1+2 顾ieyi=厂i+卩e+页yi 攀mduo=木m+大d+手uo 5、编码顺序 汉字按书写笔顺编码,每个字根只能用一次,廴和辶优先拼写。 街hitt=行hi+土t+土t 衮ytbs=衣yt+八b+厶s 键jjv=钅j+廴jv 这adwo=辶ad+文wo 卵medd=卯me+丶d+丶d 6、后缀,o和z无意义 爱=a 爱=aoo 乙=ao 乙=aooo 比=bz 比=bzoo 匕=bzo 7、字根表,/举例 A(zh) ao乛乙=折 ao爱 aa专=专a+乛a ad之辶=之a+丶d ae兆=兆a+儿e ag竹=竹a+个g ah止正=止a+一h ai州=州a+川i aj周=周a+吉j ak中=中a+口k ak舟=舟a+冂k al重=重a+里l am奥=奥a+米m ap豸=豸a+丿p as乍=乍a+三s ar隹=隹a+亻r at至=至a+土t au直真=直a+十u av争=争a+肀v aw敖=敖a+夂w ax爪爫=爪a+小x ay展=展a+衣y az卓凹 B bo不 ba步=步b+止a bb北=北b+匕b bc扁=扁b+艹c bd八丷=八b+丶d be半=半b+二e bg疒病=疒b+广g bh百=百b+一h bk贝=贝b+冂k bm本=本b+木m bp勹包=包b+丿p bq卑=卑b+千q br白=白b+日r bs巴=巴b+巳s bs髟=髟b+彡s bt鼻=鼻b+田t bu卜=卜b+丨u bo宝宀=宝b+玉v bw敝鳖=敝b+夂w bx必=必b+心x bx秉=秉b+彐x by表=表b+衣y bz匕比 C艹草 co才 cc曹=曹c+艹c cd寸=寸c+丶d ck册=册c+冂k cp囱=囱c+丿p cr从=从c+人r cw匆=匆c+勿w cy裁=裁c+衣y cy裁字旁/戴cytg cz存 D氵 do丶=点 do大的 da电=电d+乛a db单=单d+八b de兜=兜d+儿e dg第弟=第d+弓g dh丁=丁d+一h di段=段d+厂i dk丹=丹d+冂k dm鼎=鼎d+目m dp刀刂=刀d+丿p dq典=典d+曲q du斗=斗d+十u dx东=东d+小x dx歹=歹d+夕x dz登字头/葵codt dz登豆 E eo二 ei而=而e+厂i ep儿=儿e+丿p eu耳阝卩=耳e+丨u F fo方 fa发=发f+乛a fb父=父f+八b fg弗=弗f+弓g fj凡=凡f+几j fk缶=缶f+凵k fi反=反f+厂i fr夫=夫f+人r fs非=非f+三s fv甫=甫f+月v fx愤=愤f+忄x fx愤字旁/喷kofx fy风凤=风f+乂y G go工 ga弓=弓g+乛a ga龟=龟g+乙a gb官=官g+宀b gb官字底/追adpg gc甘=甘g+艹c gd戈=戈g+丶d ge敢=敢g+耳e gg贯=贯g+毌g gh鬲隔=鬲g+一h gh干=干g+一h gi广=广g+厂i gk谷=谷g+口k gm果=果g+木m gn革=革g+廿n gp瓜=瓜g+丿p gr冓篝=冓g+冉r gs鬼=鬼g+厶s gt高=高g+亠t gt高字头/亮gtjo gu古=古g+十u gu鼓=鼓g+十u gv骨=骨g+月v gw光=光g+兀w gx艮跟=艮g+彐x gy更=更g+乂y gz共字头/昔gzrk gz共 H ho一=横 ho回 ha曷喝=曷h+乚a hb黄=黄h+八b hd黑=黑h+丶d hi行=行h+彳i hj虎虍=虎h+几j hj虎字头/虚hjyh hk后=后h+口k hl亨=亨h+了l hm禾和=禾h+木m hp乎=乎h+丿p hr火灬=火h+人r hs徽=徽h+糸s hs徽字旁/微hsjo ht亥孩=亥h+亠t hu户=户h+尸u hw巟荒=巟h+亡w hx惠=惠h+心 hz奂换 I(ch) io出串 ia承丞 ib乘=乘i+北b ic垂=垂i+艹c id尺=尺i+ヽd ih厂=厂i+一h ik虫=虫i+口k ik臣=臣i+匚k il产=产i+立l ip彳=彳i+丿p iq车=车i+七q ir齿=齿i+人r ir春=春i+日r ir春字头/奏irth it丑=丑i+土t it赤=赤i+土t iu川巛=川i+丨u iv朝=朝i+月v iv朝字旁/韩ivwu iy叉=叉i+又y iz镸长 J金钅 jo几 ja己=己j+乛a jb具=具j+八b jb兼=兼j+八b jd久=久j+刀d je见=见j+儿e jf夹=夹j+夫f jl劲=劲j+力l jl劲字旁/经sojl jg戋=戋j+戈g jh巨=巨j+一h ji斤=斤j+厂i jk巾=巾j+冂k jk句=句j+口k jl井=井j+廾l jn及=及j+乃n jn堇=堇j+廿n jm监=监j+皿m jm监字头/临jmku jp九=九j+丿p jq聚=聚j+取q jr今=今j+人r js柬=柬j+四s jt京=京j+亠t jt坚=坚j+土t jt坚字头/竖jtlo ju甲=甲j+丨u ju吉=吉j+士u jv脊=脊j+月v jv建廴=建j+聿v jv建字旁/延jvpa jx臼=臼j+彐x jx疌捷=疌j+彐x jy角=角j+用y K口 ka冂冖=冂k+乛a kb卡=卡k+卜b kd可=可k+丁d ke克=克k+儿e kh匚=匚k+一h kl开=开k+廾l km看=看k+目m ku凵=凵k+丨u L lo立六 la了=了l+乛a lb鹿=鹿l+比b lb卢=卢l+卜b lc两=两l+从c ld留=留l+田t lf耒=耒l+丰f lg良=良l+艮g lh丽=丽l+一h lk乐=乐l+匚k lk卤=卤l+口k ll劳=劳l+力l lm林=林l+木m lm粦=粦l+米m lp力=力l+丿p lp廾弄=廾l+丿p lq龙=龙l+七q ls离=离l+厶s lt里=里l+土t lu录=录l+水u lv隶=隶l+肀v lw来=来l+未w lx尞僚=尞l+小x ly吏=吏l+乂y lz老字头/者lzrk lz老 M木 mo没 ma矛=矛m+乛a ma门=门m+乛a mb米=米m+丷b mc莫=莫m+艹c md母=母m+丶d md免=免m+刀d me卯=卯m+卩e mh马=马m+一h mi面=面m+厂i mk皿=皿m+冖k mk目=目m+口k ml麻=麻m+林l mp毛+毛m+丿p mq民=民m+七q mu末=末m+丨u mw麦麥=麦m+攵w my美=美m+羊y mz眉冒 N no女你 na乃=乃n+乛a nb屰逆=屰n+丷b nc廿=廿n+艹c ne那=那n+阝e nh鸟=鸟n+一h nk农=农n+冂k nr内=内n+人r nt男=男n+田t ns能=能n+厶s np牛=牛n+丿p np牛字头/先npep nu南=南n+十u nw年=年n+午w ny囊=囊n+衣y O oo零〇 P po丿=撇 po片 pa爿=爿p+乛a pf旁=旁p+方f pg平=平p+干g pr疋=疋p+人r px辟=辟p+辛x py皮=皮p+又y pz菐 Q qo去千 qb酋=酋q+丷b qc曲=曲q+艹c qc其=其q+艹c qd犬犭犮=犬q+大d qf缺夬=缺q+缶f qf缺字旁/决eoqf qf券=券q+夫f qf券字头/卷qfoe qh七=七q+一h qh佥=佥q+一h qj丘=丘q+斤j qn妻=妻q+女n qp气=气q+丿p qr欠=欠q+人r qs且=且q+三s qu=q+水u qv前=前q+月v qy乔=乔q+夭y qw齐=齐q+文w qz青字头/素qzso qz青 R人亻 rg弱=弱r+弓g rk日=日r+口k rp入=入r+丿p rr肉=肉r+人r rt冉=冉r+土t ru壬任=壬r+士u S糸纟丝 sa巳=巳s+a乛a sb赛=赛s+贝b sb赛字头/塞sbto sd厶私=厶s+丶d se四罒=四s+儿e sh三彡=三s+一h si卅=卅s+川i sk司=司s+口k sr伞=伞s+人r st啬=啬s+土t sv肃+肃s+肀v sy丧=丧s+衣y sz色 T to她他 ta凸=凸t+乛a tb它=它t+匕b td兔=兔t+刀d td亠=亠t+丶d te头=头t+冫e th土=土t+一h tk田=田t+口k tp乇托=乇t+丿p tq屯=屯t+七q tz天太 U(sh)手 uo丨=竖 uo是 ua尸=尸u+乛a uc身=身u+才c ud水=水u+丶d ud书=书u+丶d ue士=士u+二e ug舌=舌u+古g uh十=十u+一h uh上=上u+一h ui石=石u+厂t uj鼠=鼠u+臼j uj殳=殳u+几j uk山=山u+凵k ul食饣=食u+良l um束=束u+木m un生=生u+牛n up氏氐=氏u+丿p uq世=世u+七q ur申=申u+日r us豕豖=豕u+三s ut矢=矢u+天t uu声=声u+士u uv事=事u+肀v ux示礻=示u+小x ux尚=尚u+小x uy善=善u+羊y uz首=首u+自z V(yu) vo月 va予=予v+乛a vb员=员v+贝b vd雨=雨v+丶d ve元=元v+二e ve于=于v+二e vg戉越=戉v+戈g vh鱼=鱼v+一h vj禺遇=禺v+甲j vk曰=曰v+口k vm粤=粤v+米m vp禹=禹v+丿p vr余=余v+人r vs云=云v+厶s vu聿肀=聿v+丨u vw玉=玉v+王w vx羽=羽v+习x vz与 W wo我文夂 wa瓦=瓦w+乛a wa武=武w+止a wb勿=勿w+勹b wc巫=巫w+从c wd万=万w+刀d wg五=五w+工g wh乌=乌w+一h wi戊=戊w+厂i wj丸=丸w+九j wl为=为w+力l wm未=未w+木m wp毋=毋w+丿p wt王=王w+土t wu韦=韦w+丨u wx舞=舞w+夕x wy无旡=无w+尤y ww囗围=围w+韦w wz亡 X心忄 xo下 xa夕=夕x+乛a xb穴=穴x+八b xd象=象x+刀d xg襄=襄x+冓g xh彑彐雪=彐x+一h xj喜=喜x+吉j xk凶=凶x+凵k xl辛=辛x+立l xm血=血x+皿m xp向=向x+丿p xp囟=囟x+丿p xq熏=熏x+千q xr香=香x+日r xr旬=旬x+日r xt幸=幸x+土t xu小=小x+亅u xw西覀=西x+兀w xx兴=兴x+小x xy叚霞=叚x+又y xz享 Y yo有右 ya已=已y+乛a yb丫=丫y+八b yb羊=羊y+八b yc牙=牙y+才c ye尢尤=尢y+儿e ye印卬=印y+卩e yd又=又y+丶d yf赢=赢y+凡f yf赢字头/嬴yfno yg夷=夷y+弓g yh业亚=业y+一h yi页=页y+厂i yi严=严y+厂i yk言讠=言y+口k yk央y=央y+冂k yl音=音y+立l ym益=益y+皿m ym杨=杨y+木m ym杨字旁/汤udym yn燕=燕y+廿n yp乂义=乂y+丿p yp夭=夭y+丿p yq弋=弋y+七q yr由=由y+日r ys幺=幺y+厶s yt衣衤=衣y+亠t yt衣字底/展uagy yt亦=亦y+亠t yu永=永y+水u yu殷=殷y+殷u yv用=用y+月v yw尧=尧y+兀w yx酉酒=酉y+西x yx尹=尹y+彐x yy甬勇=甬y+用y yz也疑 Z zo子走 zb曾=曾z+八b zc卒=卒z+从c zg左=左z+工g zg左字头/右ezko zi臧=臧z+臣i zk足=足z+口k zm自=自z+目m zr早=早z+日r zt在=在z+土t zu宗=宗z+示u
LDA模型的理解对很多人是一种挑战,尤其是参数估计部分。本文档详细给出了TOTLDA和LDA两个主题概率模型的参数估计需要用到的后验概率的推导过程,并采用了两种方法,对主题概率模型研究人员具有很好的启发意义!Gibbs Sampling Derivation for LDA and ToT, Han Xiao, Ping luo Gibbs sampling:为了对x进行佔计,一般我们要从 P(X)≡P 中进行抽样。如果P(X)不易得,我们可以通过对所有的P(x|X_)进行抽样来近似 其步骤如下 1.随机初始化X0)=(x10,x20)…,x 2.重复进行T轮抽样, 在每轮抽样中,对于=1…N,每个xP从P(xPx9,…2x1,x(+1…,x)抽样 3.当 Burn-in之后,可以通过几轮抽样计算P(X) 为了不失一般性,下面对ToT的 Gibbs sampling过稈进行推导 1.在TOT的 Gibbs sampling中,我们要 P( zdilw,t,zdt,a,β,V) 然后才能跟据它,对生成wd,td的zd进行抽样估计。因为zd是隐减变量,一旦抽样估计完成,对丁每个wa它生成 自的 topIC就变成已知;对于每个 document,它包含的 topiCS也变成已知。那么对于 document-topics分布0d和 topic-words上的分布中2也就可以非常容易的破拟合出来。 Step1:根据 )=P(z) 和贝叶斯公式可以得到 P(zawt,z_dt,ax,β,V) P(W,tz,c,β,甲)P(w,t,zcB, P(wtzd,a,阝,乎P(w, t, z-dil,β,v 根据 Graphical Model,wda,ta都是由za生成的,如果不考虑zd则无法考虑wd,td。从而得到 P(zdw,t,z_di,x,βv)∝ P(Z,,t]a,B,p) t β,V) 2.由上式可知,在 Gibbs sampling中关键是要出如下的联合概率 (w,t, zla, B, p) step1:根据 Graphical Model,咯去Φ,6,可以将联合概率拆开 P(w,t,zaB,)=P(w|z,β)P(t平,z)P(za) step2:引入Φ,θ,对Φ,回进行积分。再根据 Graphical Model,可以写出 P(w,t, zla,B,)=P(t!, 2) P(wlz, p)P(pIB)da P(zle)P(ela)do step3:对于整个 corpus,拆开所有黑体和大写,条件概率中的条件,z可以写做ψ;ZΦ写做中 N N plai P(中2|β)d中2 JITE P(zdi led)prelude Z=1 Step4:由于从第zd个 topic中抽去wd是满足多项式分布中2,的,因此 N d i 同理由于从第d个 document中抽取zu也是满足多项分布θa的,因此 P(zdi led) d d=1i=1 d=1z=1 将两式带入(2.3)中可以得到, Gibbs Sampling Derivation for LDa and ToT, Han Xiao, Ping Luo P(中2|β)d ed P(eala)de 7 d=1i=1 d=1z=1 step5:根据 dirichlet的后验分布,可以将P(中2|B)和P(Oda)开,得到 N 心!G T d=1i=1 r(β) 3-1)d中 11(ax)2=5 de step6:由于mCx18)与中无关,C叫2与无关,可以将它们提出,得: N P(tai lvz 2=1pv T r(a 1e()(心!(门 -1 d6, step7:由于不同的 topic的 topic-words分布是独立的(比如φ1与中2是独立的,可以通过d- separation判定),因此 连乘的积分可以写作积分的连乘;同理,不同 document的 document-topics分布也是独立的(01与02是独立的) 因此可以上式可以写为: r:)(21门(÷*a)(U nd, tarded 11(a dz d=11=1 step8:根据欧拉积分 I= r(1a) 对(27)式中后面两项使用欧拉积分可得 D C P(wt,za,β,)= r(nzy+阝) T(ndz +az) Ilv= r(Bv) d=1i=1 r(a)/ir(zv-1nz +Bv)d-r(zI-1ndz+a2) 3.* full conditional probability Step1:将(28)中的式子代入,可以得到 P(zW,ta,B平 t-di|a,阝, D -v=1 r(n2+β)mDT=r(naz+ 2n八(正=1r(民) r(a2) r(Ev=1n,y +Bv d-r(zi=1(nd z +ar)) 四1lepe(tdb)(( r(z=1a2) Iv-r(nz,y+By)rd Ilz-1r(ndz+ Ilv-1r(Bv)(2-1 T, r(a2/ v=tzv +β Σ=(na2+a2) -di step2:此时,要留意所有角标与di有关的nc2和n2x,由于不考虑zd,因此watd不用考虑(因为它们没有被牛成), 也就是说在考虑 topic Z和 word的所有共现次数时(即n2xy),我们忽略了这一次z与w的共现,这仅仅会让nda减 1,而对于其他的n2w并无影响:同样的,这也会使ndx减1,而并不会使其他的n发生改变。注意:MTD的 大小并没有发生改变 将上式拆成3部分来看,可以得到如下二式 P(taizu) Gibbs Sampling Derivation for LDA and ToT, Han Xiao, Ping luo v=1 Z=1 Ilv-ir(Bv)/\21r(az ) +0 3) nd, z tuz r(n Step3:关键是对(32.3式的化简),首先看其前一部分的分母 n,, (n2awa+阝wa-1)×m=1IV=r(n2x+B3) rCw=1nx+)T(C=(n+)-1)xr(=(2+B Step4:看前一部分的分子 (n+β) rInza wa d e,V 1r(x-(2+,)T((l2a+.)x(2=1(2+B) step5:(3.4)/(33),借助r(x+1)=xr(x)可以得到 (n2+阝 r(=1(n2+ +阝 ∑=1(n+B)-1 (xy=1(n2+阝 step6:看后一部分的分母 ∏z=1T(n ndg+ d diz )×TB=1I=1r(nd2+a2 Z z(叫2+c)=rCxm(ndna+a)-1)xm出,r(xm=(a+a2) step7:看后一部分的分子 Isr(ndz+ r(nd di, zdi )×[=1m=1r(naz+a2)d (2z_(nd. +a2))r(2z1nduix+ai)xIlad r(2T-(ndz +a2)) step8:(3.7)/(3.6},借助『(x+1)=xr(x)可得 ILs, r(ndz d=Ir(st (ndz+ n dinz di r(ndz ta 1d 1 n Step9:将(3.8)(35)(3.2)代入到(3.1)可得 P(zw,t,z-di,a阝,平)∝ P(z-di, W-di t-di a,B, y)P(tail zd )xyyatBwdi--1 P(Z,w, ta,B, p) =1(na+)-1∑=1(nx+)-1 (1-td) di“dt-1 nz,a, wui nd,ji, z i (nax+阝)-1 其中B(β) r(axr(β) 我们可以利用上式对每个zd进行抽样,当迭代次数足够大时,抽样结果趋丁稳定 r(a+β) LDA中 Gibbs Sampling中P(adw,zd,.,B)+a-1+2(adz+ nu, ldi 对比 LDA Gibbs Sampling发现,模型中加入时间信息后,对zd抽样时依据的概率分布做∫一些改变,相当于在LDA 的基础上增加了一个因子。 Gibbs Sampling Derivation for LDA and TOT, Han Xiao, Ping lut 当对zd的抽样完成后,我们可以方便的根据n2x和naz对中2与04进行计 例如,对于第z个 topIC的 topic-words分布,可以用 中2 n2+阝-1 (n2x+β) 得中2=( D. Quick Derivation 对于TOT的 Gibbs Sampling,我们要的是 P(zd1Wtz-dt,,阝平) 根据 Bayes rule,上式可以写作: P(zdi lw, t, z-di, a,B, P(w,tz,ax,阝,) P(wt,Z,a,阝,Y 根据 Graphical Model,wa,t都是山z生成的,如果不考虑za则无法考虑wd,td,因此: P(w,tZ,,β P(wtz|o,阝乎 P(edi lw, t, z-di, a, B,)ople-diw-di, t-di,a,B, y)P(z_di w aul-di/, B,Y) 根据 d-sperate可以判定对于不同的:zd,watd与zd,wd,td在条件a,β甲下是独立的。因此,上式右边可以拆为 各项连乘的形式,分子分母消去公共项,只剩P(zd,wd,tax,B,V),即 P(d|W,tzdi,,β,甲)∝P(ai,wd,tail,阝,甲) 又由于z,wd,td与z,w,td实际上在条件,,a,平下也是独立的,同理可得 P(zd|w,tzd中,,c,β,)∝P(z 中,e,x,β,甲) 根据 Graphical Mode|P(dwa,td|,e,a,,甲)可以写作 P(z 仲中6,,阝,)=P( wailed,中β)P y)P(zdi le, a) 山于抽wd和抽zd都满足多项式分布,批tG满足beta分布,于是有 P(wailed,,β)=、y ∑v=1(n2x+凤 n P(zdi le, a n di P(tai lzdi, p) (1-td B(中-1,中-1) 于是得到P(dw,txd,B甲)a(1t)帅t甲- B(山d-1,a-1)x +radix nd di di 对于LDA,推导过程同上,只是我们无需考虑td,于是P( dili, zdi a,B.甲)=2dym+B=x n Zdi.+Pv E。 References [1D Blei, A Ng, and m. Jordan Latent dirichlet allocation Journal of machine Learning research, 3: 993-1022, 2003 [2 Xuerui Wang, Andrew McCallum. Topics over Time: A Non-Markov Continuous-Time Model of Topical Trends. KDD06 August 20-23, 2006, Philadelphia, Pennsylvania, USA

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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