day1 - 初窥门径
为什么要学编程
人工智能,边缘计算,大数据,通信工程,互联网,计算机科学与技术。。。
- chatGPT
- stablediffusion
- VITS
- AR/VR
- 游戏制作
算法入门
神经网络,数据挖掘,数字孪生,进化算法,目标检测,语义分割。。。
- 什么是算法
- 程序=数据结构+算法
- 怎么学算法
分治
- 二分查找(非递归)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using namespace std;
int a[1000000] = {0};//太大的数组要放到全局变量去
int main(){
int n,x,r;
int i,j,mid,left,right;
cin>>n;
//读入数组元素
for(i = 0;i < n;i++){
cin>>a[i];
}
cin>>x;
left = 0;
right = n - 1;
r = -1;//假设没找到
//当还有求解范围时
while(left <= right){
//中间下标
mid = (left + right) / 2;
if(a[mid] == x) {
r = mid;
break;
}else
if(x < a[mid]){
right = mid - 1;
}else
if(x > a[mid]){
left = mid + 1;
}
}
//输出位置
cout<<(r == -1?-1:r+1)<<endl;
return 0;
} - 二分查找(递归)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
using namespace std;
int a[1000000],x;
//求岀数组中x的下标
int fun(int left,int right){
//递归岀口
if(left <= right){
int mid = (left + right) / 2;
//如果在前一半
if(x < a[mid]){
return fun(left,mid-1);
} else
if(x > a[mid]){
return fun(mid+1,right);
}else{
return mid;
}
}else{
return -1;
}
}
int main(){
int n;
cin>>n;
//读入凝组元素
for(i = 0;i < n;i++){
cin>>a[i];
}
cin>>x;
//输出位置
int r = fun(0,n-1);
cout<<(r == -1?-1:r+1)<<endl;
return 0;
} - 思考题
洛谷 P1024
一元三次方程求解
- 零点存在定理,f(x1)*f(x2)<0
- 考虑误差esp
1 |
|