每日计划(201903)

2019年3月9日

1. 牛客网:约束的个数

约数的个数
求所有约数:

//用i*i
#include<iostream>
#include<cmath>
using namespace std;
int *yueshu(int n){
	//无sqrt(int)
	int *a=new int[(int)sqrt((double)n)];
	int temp=1;
	for(int i=1;i*i<=n;i++){
		if(n%i==0){
			a[temp++]=i;
			if(i*i!=n)
				a[temp++]=n/i;
		}
	}
	a[0]=temp-1;//记录数组长度
	return a;
}
int main(){
   	int n;
	cin>>n;
	int *a=yueshu(n);
	for(int i=1;i<=a[0];i++)
		cout<<a[i]<<endl;
	system("pause");
  	return 0;
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          					  	                

2. 查找的概念

  • 动态查找表:在查找的同时对表进行修改操作(如插入和删除)

  • 静态查找表:不进行修改

  • 动态查找表的把表结构本身是在查找过程中动态生成额,即在创建表时,对于给定值,若表中存在其关键字等于给定值的记录,则查找成功返回,否则插入关键字等于给定值的记录。

  • 平均查找长度(Average Search Length,ASL):为确定记录在查找表中的位置,需和给定值进行比较的关键字个数的期望值,此为查找成功时的ASL。
    在这里插入图片描述

3. 顺序查找(Sequential Search)——线性表的查找

  • 查找过程:从表的一端开始,依次将记录中的关键字与给定值进行比较,若某个相同,则查找成功,若扫描完整个表后没有相同的,则查找失败
  • 既适用于线性表的顺序存储结构,也适用于 链式存储结构。
  • 顺序查找
int Search_Seq(int a[10],int n){
	for(int i=0;i<10;i++){
		if(a[i]==n) return i;	//找到,返回其位置
	}	
	return 0;	//未找到
}
  • 设置监视哨的顺序查找
    省去每次都要检查i<10,查找之前对a[0] (也可以是高处的其他值)进行赋值key,a[0]起到监视哨的作用
int Search_Seq(int a[10],int n){
	a[0]=n;
	for(i=10;a[i]!=n;--i);//从后向前找
	return i;
}

在这里插入图片描述

4. 折半查找(Binary Search,二分查找)——线性表查找(效率较高)

  • 折半查找效率较高。
  • 注意:折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列
  • 过程:从表的中间记录开始查找,如果给定值和中间记录相等,则查找成功;如果给定值大于或小于中间记录的关键字,则在表中大于或小于中间记录的那一半中查找,这样重复操作,直到查找成功,或者在某一步中查找区间为空,则代表查找失败。
//假设a[10]为递增序列
int Search_Bin(int a[10],int n){
	int low=0,high=10,mid;
	while(low<=high){
		mid=(low+high)/2;
		if(n==a[mid])	return mid;
		else if(n>=a[mid]) low=mid+1;
		else high=mid-1;
	}
}
  • 递归
int Search_Bin(int a[],int n,int low,int high){
	if(low>high)	return 0;	//查找不成功
	mid=(low+high)/2;
	if(n==a[mid]) return mid;
	else if(n<a[mid])
		return Search_Bin(a,n,low,mid-1);
	else
		return Search_Bin(a,n,mid+1,high);
}

在这里插入图片描述

  • 假设每个元素的查找概率相等,则查找成功使得平均查找长度ASL=1/11*(11+22+43+44)=33/11=3
    在这里插入图片描述在这里插入图片描述

2019年3月10日

为什么每次我一想学习,就会有各种各样的破事,在家学习效率好低啊

1. 牛客网

求最大最小数:函数的传入参数为数组
成绩排序:还需要使用结构体或线性表来实现一下

2. 分块查找(线性表查找)

3. 计算机体系结构

4. 操作系统

5. 软件工程

发布了7 篇原创文章 · 获赞 0 · 访问量 112

猜你喜欢

转载自blog.csdn.net/qq_42713936/article/details/104762481