博客作业05-查找

1.学习总结(2分)

1.1查找的思维导图

1.2 查找学习体会

谈谈你对查找算法学习体会。也可以谈谈STL容器中查找如何用的。

查找在方法上可分为一下几种类型
1. 顺序查找
2. 二分查找
3. 插值查找
4. 斐波那契查找
5. 树表查找
6. 分块查找
7. 哈希查找
针对不同的类型,并没有好与不好之分,有些方法只适用于特定环境,有些方法比较简单,但浪费时间,有些方法思路十分复杂,但节约时间,但是还是得用空间去抵,所以学会查找不仅仅是要去学各种查找方法的原理以及代码实现,更重要的是能够针对不同的环境和情形下选择正确的查找方式,同时C++的库函数里面也有许多自带函数,熟练运用可以事半功倍。
map工作原理:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了, 底层采用的是树型结构,多数使用平衡二叉树实现,查找某一值是常数时间,遍历起来效果也不错, 只是每次插入值的时候,会重新构成底层的平衡二叉树,效率有一定影响.

2.PTA实验作业(4分)

2.1 题目1:6-2 是否二叉搜索树

2.2 设计思路(伪代码或流程图)

设计思路:利用中序遍历,如果是递增则成功,否则失败
bool IsBST(BinTree T) {
	int num[999],t=1;
	利用非递归方法进行中序遍历{
		将中序遍历得到的结果储存在数组num中;
	}
	for (int i = 1; num[i] != 0; i++)
	{
		如果发现后面数比前面小,即不是递增数列,t = 0;
	}
	return t;
}

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。

2.1 题目2:QQ帐户的申请与登陆

2.2 设计思路(伪代码或流程图)

设计思路:如果QQ号申请正确就插入,失败则提示,登陆时存在此QQ则成功,否则失败,也可用红黑树做
BinTree BST = NULL;int n, i = 0;char K[100001];User QQ[100001];
	输入 n;
	for (i = 0; i < n; i++) {
		输入QQ账号,密码;
	}
	int t = 0;
	for (i = 0; i < n; i++) {
		if (K[i] != 'N')  t += 1;
	}
	if (t == 0) {
		for (i = 0; i < n; i++) {
			if((QQ号符合规定)
			cout << "New: OK" << endl;
			else cout << "ERROR: Exist"<<endl;
		}
		return 0;
	}
	for (i = 0; i < n; i++) {
		if (K[i] == 'N') {
			if (QQ号或者密码不符合要求) {
				cout << "ERROR: Exist" << endl;
				continue;
			}
			else {
				插入QQ[i]
				cout << "New: OK" << endl;
				continue;
			}
		}
		else if (K[i] == 'L') {
			if (找不到QQ[i]) {
				cout << "ERROR: Not Exist" << endl;
				continue;
			}
			else
			{
				if (找到) {
					cout << "Login: OK" << endl;
					continue;
				}
				else {
					cout << "ERROR: Wrong PW" << endl;
					continue;
}}}}

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。


部分正确:这道题由于时间复杂度比较紧张,所有全删除,且最大值这个点一直过不了,于是多加了一个if让他顺利通过

2.1 题目3: 航空公司VIP客户查询

2.2 设计思路(伪代码或流程图)

设计思路:利用红黑树,如果飞行距离不足500则补到500,然后插入,然后在里面找,如果找到输出飞行距离,找不到就NO info吧
	int N, K, i;char idcard[19];long long flyway;
	scanf("%d %d",&N,&K);
         map<string, long long>Map;
	for (i = 0; i < N; i++)
	{
		输入ID和飞行距离;
		飞行距离不足500则自动增加到500;
		if (找不到Map[idcard])) {
			初始化Map[idcard] = 0;
		}
		Map[idcard] += flyway;
	}
	scanf("%d",&N);
	for (i = 0; i < N; i++) {
		scanf("%s",idcard);
		if (找不到)
		{
		printf("No Info\n");
		}
		else
			输出飞行总和距离;
	}

2.3 代码截图(注意,截图、截图、截图。代码不要粘贴博客上。不用用···语法去渲染)

2.4 PTA提交列表说明。


部分正确:利用C++的语法会导致时间不足支撑,讲C++的cin和cout全部改成scanf和printf就成功通过了

3.截图本周题目集的PTA最后排名(3分)

本次题目集总分:175分
必做题共:145分

3.1 PTA排名(截图带自己名字的排名)

3.2 我的总分:163

本题评分规则:
(1)2个题目集PTA总分145--175分:3分(全部题目都做)
(2)PTA总分在120分--145分:2.5分(必做题全部做完,选做题做部分)
(3)PTA总分在105--120分:2分(必做题大部分做完)
(4)PTA总分在80--105分:1.5分
(5)PTA总分在45分-80分:1分
(6)PTA总分在45分以下:0分
4. 阅读代码(必做,1分)

using namespace std;
int main(int argc, char const *argv[]) {
    int n, m, a, b;
    char s[2000], tmp[2000];
    set<string> st[101];
    scanf("%d%*c", &n);
    for(int i=1; i<=n; ++i) {
        while(gets(s)) {
            if(!strcmp(s, "#")) break;
            int last = 0;
            for(int j=0; s[j]; ++j) {
                if(s[j]>='A' && s[j]<='Z') s[j] += 32;
                // 分割单词,符合要求的存进 set
                if(s[j]<'a' || s[j]>'z') {
                    s[j] = 0;
                    strcpy(tmp, s+last);
                    last = j+1;
                    tmp[10] = 0;
                    if(strlen(tmp) >= 3) st[i].insert(tmp);
                }
            }
            strcpy(tmp, s+last);
            tmp[10] = 0;
            if(strlen(tmp) >= 3) st[i].insert(tmp);
        }
    }
    scanf("%d", &m);
    while(m--) {
        scanf("%d %d", &a, &b);
        int cnt = 0;
        set<string>::iterator it;
        // !important: 遍历 size 较小的 set
        if(st[a].size() > st[b].size()) swap(a, b);
        for(it=st[a].begin(); it!=st[a].end(); ++it) {
            if(st[b].count(*it)) cnt++;
        }
        printf("%.1f%%\n", 100.0*cnt/(st[a].size()+st[b].size()-cnt));
    }

    return 0;
}

代码点评:这是本次pta最后一题的网络代码,解题思路是每个文件内的单词存放到单独的一个 set 中。询问时直接遍历其中一个 set(必须是 size 较小的那个,否则会超时在最后一个测试点),用 count() 查找另一个 set 中存不存在这个单词即可。

  1. 代码Git提交记录截图

在码云的项目中,依次选择统计-Commits历史-设置时间段,进行搜索并截图,如下图所示,需要出现学号、项目提交说明。请在码云中将你的昵称改为“学号-姓名”。

posted @ 2018-05-26 20:21  林怡鹏  阅读(201)  评论(1编辑  收藏  举报