【算法学习】模拟退火
1.【算法学习】排序2.【算法学习】Manacher 马拉车3.【算法学习】KMP 算法4.LCA 最近公共祖先(树链和倍增)这次真有树链了!!!5.线段覆盖问题6.【算法学习】学换根dp有感7.二分图最大匹配8.【算法学习】01BFS9.洛谷 P1892 [BOI2003] 团伙 种类并查集 扩展域并查集10.【算法学习】高斯消元法11.贝叶斯公式12.背包
13.【算法学习】模拟退火
14.【算法学习】基环树15.【算法学习】树链部分16.【算法学习】莫队17.【算法学习】分块九讲18.平衡树19.圆方树20.【算法学习】点分治21.公式22.【算法学习】笛卡尔树23.【算法学习】悬线法24.欧几里得算法与 EX25.【算法学习】逆元与求解26.【算法学习】费马定理27.三分28.裴蜀定理29.【算法学习】欧拉函数φ30.【算法学习】二维转一维问题31.【算法学习】扫描线32.【算法学习】矩阵乘法33.【算法学习】同余最短路34.【算法学习】组合数学35.【算法学习】反悔贪心SA 无疑就这几个步骤。
-
设初温 t;
-
降低系数 down<1
-
设定阈值
-
更劣随机概率选择(温度越低,概率越低)
AI 评价:
#include<bits/stdc++.h> using namespace std; #define down 0.996 //降低系数 int n; struct node{ int x,y,w; }point[10006]; double ansx,ansy,answ; double energy(double x,double y){ double r=0,dx,dy; for(int i=1;i<=n;i++){//计算能量总和,总和越小越稳定 dx=x-point[i].x; dy=y-point[i].y; r+=sqrt(dx*dx+dy*dy)*point[i].w; } return r; } void sa(){ double t=3000;//设置初温,是控制接受较差解的概率 while(t>1e-15){//设置温度阈值,当温度低于阈值时,停止降温过程 double ex=ansx+(rand()*2-RAND_MAX)*t;//根据当前温度随机生成新的解 double ey=ansy+(rand()*2-RAND_MAX)*t; double ew=energy(ex,ey);//计算新值 double de=ew-answ;//计算新值和旧值的差 if(de<0){//越小越稳定,更优 ansx=ex; ansy=ey; answ=ew; } else if(exp(-de/t)*RAND_MAX>rand()){//概率选择更劣的值,温度越小概率越小 ansx=ex; ansy=ey; } t*=down;//降低温度 } } int main(){ ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++){ cin>>point[i].x>>point[i].y>>point[i].w; ansx+=point[i].x;//初始化 ansy+=point[i].y; } ansx/=n;//取平均值更合理 ansy/=n; answ=energy(ansx,ansy);//初始值 while ((double)clock()/CLOCKS_PER_SEC<0.975) sa();//卡时 printf("%.3lf %.3lf",ansx,ansy); return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)