大作业(一)

实验目的与要求:

目的:采用语言的特性来解决计算机工程问题,包括结构的设计与应用、递归和迭代的设计与应用、mapreduce的设计与应用等实验。通过语言特性的应用实验,熟练掌握编程语言的特性及其编程思想,如数据抽象、递归和迭代的设计、分而治之等思想,培养使用不同语言特性解决复杂计算机工程问题,并对结果进行分析的能力

要求:

本实验分为三部分,如下所示

第一部分:结构的设计与应用

请用你熟悉的语言实现一个简易区块链系统, 功能包括查询块长度,插入块,查找块,检查块信息等,请分别用记录结构(如C语言的struct、Java的class等)和不用记录结构实现,并比较(如可读性、可写性、可靠性、效率等)。

提示:

块结构的信息:索引,时间戳,数据,哈希值,前置哈希值(加密)

块的生成:注意首块和其他块的区别

块的存储结构(账本):块链表

检查块:前后索引一致?前后hash值一致?当前hash值正确?

第二部分:递归和迭代的设计与应用

大部分语言都提供了递归与迭代这两种机制,例如,最大公约数的计算可分别用这两种机制来实现:

/* 递归实现 */

int gcd(int a, int b) {

 /* assume a, b > 0 */

 if (a == b) return a;

 else if (a > b) return gcd(a-b, b);

 else return gcd(a, b-a);

}

/* 迭代实现 */

int gcd2(int a, int b) {

 /* assume a, b > 0 */

 while (a != b) {

 if (a > b) a = a-b;

 else b = b-a;

 }

 return a;

}

请用你熟悉的语言分别用递归和迭代这两种机制来设计和解决以下两个问题之一,并对结果进行分析:

  1. 折半查找法:在N个有序数中查找数d。

  2. 台阶问题:楼梯有N阶,上楼可以一步上一价,也可以一次上二阶。请问共有多少种不同的走法。

第三部分:mapreduce的设计与应用

Google处理大规模数据的mapreduce来源于函数语言的map函数和reduce函数,下面是map和reduce的js实现:

/* map的js实现 */

function map (f, inarray) {

 var out = [];

 for(var i = 0; i < inarray.length; i++) {

 out.push( f(inarray[i]) )

 }

 return out;

}

/* reduce的js实现 */

function reduce (f, inarray) {

 if(inarray.length <= 1) return;

 if(inarray.length == 2) return f(inarray[0],inarray[1]);

 r = inarray[0];

 for(var li = 1;li < inarray.length; li++) {

 r = f(r, inarray[li]);

 }

 return r;

}

简单来说,map将函数f分别作用到数组inarray的每个元素上,并返回由这些作用结果组成的新数组,而reduce将函数f分别从左到右地作用到数组inarray的(两个)元素,并返回最后的作用结果,如下列例子所示:

js> map(function(x){return x+1}, [1,2,3,4,5])

[2,3,4,5,6]

js> reduce( function(x,y){return x+y}, [1,2,3,4,5])

15

js> reduce( function(x,y){return x*y}, [1,2,3,4,5])

120 

一、请实现map和reduce函数(建议使用支持函数作为参数的语言,如Haskell、js、python等),并使用map和reduce来

  1. 计算数组的平方和,如[1,2,3,4]的平方和为12+22+32+42。

  2. 统计数组中正数的个数,如[-1,1,0,-2,5]的正数个数为2。

  3. 展平数组的数组,如[[1,2],[3,4,5],[6]]展平后为[1,2,3,4,5,6]。

二、现实世界中数据可能有各种不同的结构,二叉树是其中常用的一种结构。请设计能够处理二叉树数据的maptree和reducetree。

  1. 请实现maptree和reducetree

  2. 请使用maptree和reducetree为下列通讯录加上区号,并统计深圳电话的个数

Record(
            Data(N:小明,A:深圳,T:26530001)
            Record(
                        Data(N:小王,A:广州,T:26530002)
                        Record(
                                     Data(N:小丽,A:深圳,T:26530003)
                                     Data(N:小红,A:北京,T:26530004)
                         )
            )
)

提示:假设有树结构的抽象数据类型:

data Tree type = Leaf type | Node (Tree type) (Tree type)

maptree f(x){return x+1} (Node (Node (Leaf 1) (Leaf 2)) (Leaf 3))

= (Node (Node (Leaf 2) (Leaf 3)) (Leaf 4))

reducetree f(x,y){return x+y} (Node (Node (Leaf 1) (Leaf 2)) (Leaf 3))

= (1+2)+3 = 6
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,366评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,521评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,689评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,925评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,942评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,727评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,447评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,349评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,820评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,990评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,127评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,812评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,471评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,017评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,142评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,388评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,066评论 2 355

推荐阅读更多精彩内容

  • 以大地为纸,草木为笔 冬天在写一份遗书 未了的心愿河流一样封冻 风声念念有词 一遍遍复述盛夏的故事 太阳和月亮 是...
    甘肃子溪阅读 329评论 0 5
  • (万年不更文) 因为万年不更文,所以今天小小的怀旧一下。 最近在看《新白娘子传奇》(1993版),到现在,已经过去...
    给我一份厨师沙拉阅读 547评论 0 2
  • 想和你一起走路,嘲笑你的时候你就一只手箍住我的脖子,我就很爱演地假装被你拖着走。 想靠在你胸膛上睡着,热乎乎的胸膛...
    序诗KLB阅读 123评论 0 0