Programming 板


LINE

※ 引述《korea01 (包仔)》之铭言: : 最近要写prolog程式(about max heap) : 但~对prolog语言不熟悉 : 连最基本该如何下手都不知道~ : 不晓得有谁能救救我一下>"< : 好困扰唷~上网找都找不到详细一点的~ : 完全没头绪 : 我只会写C&C++程式&一点点JAVA~ : 请会的人教教我&指导我吧!! : 谢谢^^ 要先知道什麽叫 max heap. 先浏览过资料结构方面的文件或书籍. Max heap 的特性大概是说: 1) 是tree 2) 每个节点的key值都不大於父节点的key值. 然後可用程式写出这个结构: 1. 建立树: 怎样建立树? 先把树定义为二种情况, nil 或 t(K,L,R), K一定要是数字. 而 L 和 R 也是树,也就是说,二个也都分别可能是 nil 或t(K,L',R'). 然後可以写一个predicate建树. 建立一棵树要有输入项,我们说用一列数字丢下去,让数字变成一棵树, tree([], nil). tree([N|Rest], t(N,L,R)) :- partition(Rest, Nums1, Nums2), tree(Nums1, L), tree(Nums2, R). 第一句说,没资料就出现一棵 nil 树. 第二句说,拿到一列数字,可以先把第一个数字放在树根,然後要想办法产生子树. 假设有另一个predicate称为partition,给它一列数字,它可以把这列数字分开成两部份, 於是,你要用它把 Rest 分成 Nums1 和 Nums2, 然後 Nums1 可以建左子树, Nums2 可建右子树. 藉由 Prolog 的执行时的 backtracking, partition/3 会帮你产生 各式各样可能的分配方式. 而接下来,问题就在於 partition/3 该怎麽定义才好. 这里是一个提示,其他部份你可以自己想清楚. 2. 建立 max heap 树: 前面提到只是按输入一列数字的顺序产生树. 第一个数字一定是树根. 回想 max heap 的特性,说,每个节点key值都不大於树根key值,换句话说, 树根key值大於或等於其他每一个节点. 所以,考量前面建立树的方式,只要把输入的数字列调整成每一列的第一个数字 一定不小於後面其他数字. 对前面的 tree/2 来说,还要去改 partition/3 是一些麻烦事; 或者说, 你思考 partition/3 的内容还要同时顾到第一数字要不小於後面数字,比较花费精神. 这时候可以使用「产生→检查」的程式风格,先随意产生大量并包含全部解答的集合, 之後再使用一些检查将合理的项目挑出来. 如果我收到一列数字,只要检查第一个数字不小於後面其他数字,程式这样做: notlessthan([]). notlessthan([N]). notlessthan([N1,N2|Rest]) :- N1 >= N2, notlessthan([N1|Rest]). 然後看看前面tree/2第二句,用到 partition/3 之後得到的 Nums1 和 Nums2 需要检查. 於是,把 tree/2 第二句改成: tree([N|Rest], t(N,L,R)) :- partition(Rest, Nums1, Nums2), notlessthan(Nums1), notlessthan(Nums2), tree(Nums1, L), tree(Nums2, R). 另一方面,执行程式时,呼叫 tree/2 所给的那一列数字, > tree([10,1,2,3,4,5,6,7,8,9], T). ... blah blah blah ... 也要确定第一个数字不小於後续数字. 这看要多写一点程式处理,或是用手工处理,你可以自己决定. --



※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.160.211.92
1F:推 korea01:谢谢^^ 220.134.253.50 05/30 17:31







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP