耐人寻味的优化(数据结构)

本文介绍了一种将扁平数据结构转化为层级数据结构的方法。通过示例代码演示了如何利用哈希表来组织数据,使得原始的扁平数据能够以更直观的层级形式展示出来。

1.有扁平数据结构转为层级数据结构(里面还有些地方不是很明白,希望以后回过头来能在琢磨一下)

var tableData = [{"province":"浙江","city":"杭州","name":"西湖"},{"province":"四川","city":"成都","name":"锦鲤"},{"province":"四川","city":"成都","name":"方所"},{"province":"四川","city":"阿坝","name":"九寨沟"}];
var keys = ["province","city","name"];
var transObject = function(tableData, keys){
    var hashTable = {}, res = [];
	debugger;
    for(var i = 0; i < tableData.length; i++){
    	var arr = res, cur = hashTable;
		for(var j = 0; j < keys.length; j++){
   			var key = keys[j], field = tableData[i][key];
			if(!cur[field]){
  				var pusher = {
					value: field
				},tmp;
				if( j !== (keys.length - 1)){
 					tmp = [];
					pusher.children = tmp;
                }
				cur[field] = { pos: arr.push(pusher) - 1 };
				cur = cur[field];
				arr = tmp;
            }else{
				cur = cur[field];
				arr = arr[cur.pos].children;
            }
        }
    }
	return res;
};
var res = transObject(tableData,keys);
console.log(res);

系统的基本功能 《红楼梦》是中国古典四大名著之一,其中人物关系错综复杂、耐人寻味。本课题要求编写一个程序,实现对《红楼梦》中的主要人物进行分析,包括出场次数、人物的亲密度等等。 人物的亲密度可以通过计算在同一篇幅中共同出现的频率进行计算。 2 要求及提示 2.1 基本要求 要能提供以下几个基本功能: (1)系统内小说主体和小说主要人物请自行从互联网上进行搜索下载,并保存在文本文件中,待分析人物由用户从键盘上输入; (2)设计并实现系统的相关界面; (3)分析数据时读取保存的文本文件进行分析; (4)可以按照要求进行数据排序,包括:按出场次数从多到少排序、按篇幅跨度从大到小排序、按与其他人物的关系密度从高到低排序等等; (5)可以根据用户输入单独查询某位主人公的分析结果; (6)输入查询人物的分析结果,包括:出场次数、篇幅跨度、与其他人物的关系密度。 2.2 选做要求 (1)保存功能:能够将用户看到的结果按其需求保存到指定位置或覆盖已有文本文件。 (2)异常处理与读取功能:在读取默认位置的文件出错时,能够按用户选择读取新的小说文本文件,增加程序的健壮性。 2.3 提示 (1)因为小说中的人物存在别名,实现过程中可以用正则表达式来在文本中寻找。 (2)程序的总体框图如下: 图1红楼梦人物分析系统总体框图 (3)数据结构: 依据选定的小说主要人物,定义人物的结构体,设计内容如下: struct Role{ //人物信息 char ID[20]; //编号 char name[20]; //姓名 int times; //出现次数 int freq; //账户频率 } 2.4 其他要求 (1)在上述功能要求的基础上,为了提高成绩,可以添加一些额外的功能。 (2)变量、方法命名符合规范。 (3)注释详细:每个变量都要求有注释说明用途;方法有注释说明功能,对参数、返回值也要以注释的形式说明用途;关键的语句段要求有注释解释。 (4)程序的层次清晰,可读性强。
最新发布
06-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值