已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 第3章设计与实现 概述1 算法 以Markov算法为例2 选择数据结构3 程序结构4 小结 2 概述 数据结构是程序设计的中心环节eg1单向链表问题 数据结构 程序语言的关系问题 处理流程 算法数据结构 数据保存 处理的状态语言是对数据结构的描述手段Markov 马尔可夫 随机数据生成 3 算法 用途输入的文章视为一系列互相重叠的短语 算法将根据所有短语生成一个随机性的文章短语 前缀 2个词 后缀 1个词 算法原理根据原文本的统计性质 随机选择任意前缀的某个后缀输出并调整前缀 进行迭代输入所有词后才能开始输出 4 算法 续一 算法描述 例如前缀长度为2设置W1和W2为文本的前两个词输出W1和W2循环 随机地选出W3 它是文本中W1W2的后缀之一打印W3 把W1和W2分别换成W2和W3重复循环 5 算法 续二 算法例子原文ShowyourflowchartsandconcealyourtablesandIwillbemystified Showyourtablesandyourflowchartswillbeobvious end 部分前缀 后缀对Showyourflowchartstablesyourflowchartsandwillflowchartsandconceal willbemystified obvious 输出的例子ShowyourtablesandIwillbeobvious 6 选择数据结构 前提 中等规模的数据量 输入词数设定输入的保存方法 影响生成算法完整的输入串 词的指针数组 产生新词 调整前缀 检索所有词 输出匹配的某个后缀词的位置倒排散列表指向词在串中链表 词的的位置 扫描所有词 无关联 前缀 后缀集合 状态集 输入时形成所有可能前缀并记录每个前缀的所有可能后缀输出时对任意前缀 随机选取某个后缀输出即可任意状态 任意后缀 链表 动态数组前缀的关联性 散列表 7 选择数据结构 续一 附加问题短语出现多次 相同的前缀 后缀 后缀保存多次vs 后缀 计数器词本身的表示 存储为独立字符串vs 词的散列表 节约存储 指针比较 总体结构描述程序基于一个状态表执行每个状态由一个前缀 后缀链表组成前缀作为关键词 保存在散列表中每个前缀是固定大小的词集合 8 选择数据结构 续二 图例 NULL NULL NULL statetab NHASH pref 0 suf pref 1 Show word you pref 0 suf pref 1 一个State next next next flowcharts word next tables 另一个State 9 选择数据结构 续三 总体结构C表示常数 边界假设enum NPREF 2 numberofprefixwords NHASH 4093 sizeofstatehashtablearray MAXGEN 10000 maximumwordsgenerated 状态表typedefstructStateState typedefstructSuffixSuffix 10 选择数据结构 续四 structState char pref NPREF prefixwords Suffix suf listofsuffixes State next nextinhashtable structSuffix char word suffix Suffix next nextinlistofsuffixes State statetab NHASH hashtableofstates 11 程序结构 顶级结构 0 1级 Markov造词 建立状态表build prefix stdin Level1 设定结束状态add prefix NONWORD 生成输出generate nwords 说明初始前缀设定 使用一个虚前缀 类似头结点 NONWORD数组NONWORD不会作为常规词 charNONWORD n Level0 12 程序结构 续一 0级程序 markovmain markov chainrandomtextgeneration intmain void inti nwords MAXGEN char prefix NPREF currentinputprefix longseed seed time NULL srand seed for i 0 i NPREF i setupinitialprefix prefix i NONWORD build prefix stdin add prefix NONWORD generate nwords return0 13 程序结构 续二 1级程序 build readinput buildprefixtable voidbuild char prefix NPREF FILE f charbuf 100 fmt 10 createaformatstring scouldoverflowbuf sprintf fmt ds sizeof buf 1 while fscanf f fmt buf EOF add prefix estrdup buf sprintf的用法 动态形成格式串 14 程序结构 续三 add addwordtosuffixlist updateprefix voidadd char prefix NPREF char suffix State sp sp lookup prefix 1 createifnotfound 参数1表示是否创建 addsuffix sp suffix movethewordsdowntheprefix memmove prefix prefix 1 NPREF 1 sizeof prefix 0 prefix NPREF 1 suffix 2级程序 lookup addsuffix memmove 调整新的前缀 为了下一步可以依次使用prefix数组操作输入的前缀 15 程序结构 续四 generate produceoutput onewordperline voidgenerate intnwords State sp Suffix suf char prefix NPREF w inti nmatch for i 0 i NPREF i resetinitialprefix prefix i NONWORD for i 0 i nwords i sp lookup prefix 0 16 程序结构 续五 if sp NULL eprintf internalerror lookupfailed exit 1 thennmatch 0 for suf sp suf suf NULL suf suf next if rand nmatch 0 prob 1 nmatch w suf word if nmatch 0 eprintf internalerror nosuffix d s i prefix 0 if strcmp w NONWORD 0 break printf s n w memmove prefix prefix 1 NPREF 1 sizeof prefix 0 prefix NPREF 1 w 17 程序结构 续六 2级程序 lookup searchforprefix createifrequested returnspointerifpresentorcreated NULLifnot creationdoesn tstrdupsostringsmustn tchangelater State lookup char prefix NPREF intcreate inti h State sp h hash prefix for sp statetab h sp NULL sp sp next for i 0 ipref i 0 break 18 程序结构 续七 if i NPREF foundit returnsp if create sp State emalloc sizeof State for i 0 ipref i prefix i sp suf NULL sp next statetab h statetab h sp returnsp 3级程序 hash emalloc 19 程序结构 续八 addsuffix addtostate suffixmustnotchangelater voidaddsuffix State sp char suffix Suffix suf suf Suffix emalloc sizeof Suffix suf word suffix suf next sp suf sp suf suf 20 程序结构 续九 3级程序constintMULTIPLIER 31 forhash hash computehashvalueforarrayofNPREFstrings unsignedinthash char s NPREF unsignedinth unsignedchar p inti h 0 for i 0 i NPREF i for p unsig
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026广东广州医科大学校本部招聘3人备考题库(第二次编制)含答案详解(a卷)
- 2026浙江杭州市桐庐县凤川街道招聘编外工作人员1人备考题库附答案详解(培优)
- 2026年度齐齐哈尔市铁锋区公开招聘合同制专职消防战斗员、驾驶员16人备考题库及参考答案详解
- 2026福建福州市闽侯县卫健系统招聘一类编外专技人员31人备考题库及一套答案详解
- 2026四川优广人力资源有限公司第三次招聘劳务外包人员1人备考题库含答案详解(满分必刷)
- 2026福建宁德臻宸房地产开发有限公司招聘工作人员1人备考题库附答案详解(突破训练)
- 2026新疆天宜养老有限责任公司招聘6人备考题库含答案详解(a卷)
- 2026广东梅州市梅县区汇昇控股有限公司招聘8人备考题库附答案详解(满分必刷)
- 2026辽宁沈阳兴远东汽车零部件有限公司招聘2人备考题库及完整答案详解一套
- 2026年咸阳高新区管委会及下属公司招聘备考题库(32人)附答案详解(巩固)
- 【 道法 】社会主义市场经济体制课件-2025-2026学年统编版道德与法治八年级下册
- 对外投资合作国别(地区)指南-马来西亚(2025年版)
- 心血管植入型电子器械植入术护理专家共识总结2026
- 定量分析化学第六章重量分析法
- GB/T 37942-2019生产过程质量控制设备状态监测
- GB/T 2672-2017内六角花形盘头螺钉
- 电工巡视记录表(施工单位存放)
- 餐饮安全管理规章制度
- 装配钳工技能大赛实操试卷
- 配怀舍饲养管理操作流程
- 《马克思主义与社会科学方法论》课件第一讲马克思主义与社会科学方法论导论
评论
0/150
提交评论