算法原理参考自 http://blog.csdn.net/mynamelj/article/details/3071867
算法实现比较粗浅,但符合A*算法要求。
#define MAX_SIZE 800
#include
#include
#include
#include
#include
using namespace std;
struct tnode{
int gvalue;//以下3个参数是估计函数
int hvalue;
int fvalue;
tnode* parent;//不是父节点,而是指向当前节点
tnode* next;//指向链表的下一个节点
int pass;
int x;
int y;
};
tnode table[MAX_SIZE][MAX_SIZE];//存储地图
int MAX_SIZE_X,MAX_SIZE_Y;
int startx,starty,endx,endy;
tnode openlist,closelist;
//遍历链表,判段是否在列表中,找到返回1,否则返回0
int search(tnode *plist,int x,int y)
{
tnode *p=plist;
while(1)
{
if(p->next==NULL)
{
return 0;
}
if(p->next->x==x&&p->next->y==y)
{
return 1;
}
p=p-> next;
}
return 0;
}
//把table[hx][hy]加入openlist链表
int addtoopenlist(int hx,int hy)
{
//cout << "add to openlist "<< hx<<","<next==NULL)
{
break;
}
if(plist->next->x==hx&&plist->next->y==hy)
{
return 0;
}
plist=plist-> next;
}
plist->next=&table[hx][hy];
return 1;
}
//把table[hx][hy]加入closelist链表
int addtocloselist(int hx,int hy)
{
//cout << "add to closelist "<< hx<<","<next==NULL)
{
break;
}
if(plist->next->x==hx&&plist->next->y==hy)
{
return 0;
}
plist=plist-> next;
}
plist->next=&table[hx][hy];
return 1;
}
//把table[hx][hy]从openlist中移除
int delfromopenlist(int hx,int hy)
{
//cout << "delete from openlist "<< hx<<","<next==0)
{
return 0;
}
if(plist->next->x==hx&&plist->next->y==hy)
{
qlist=plist->next->next;
plist->next->next=NULL;
plist->next=qlist;
break;
}
plist=plist-> next;
}
return 1;
}
int calculateGvalue(int hx,int hy,int px,int py,int value)
{
if(abs(hx-px)==1&&abs(hy-py)==1)
{
return value+14;//斜着走
}
else
{
return value+10;//直着走
}
}
int calculateHvalue(int hx,int hy)
{
return (abs(hx-endx)+abs(hy-endy))*10;
}
int handlenode(int hx,int hy,int curx,int cury)
{
//cout << "handle node " << hx <<"," << hy << endl;
if(hx<0||hy<0||hx>=MAX_SIZE_X||hy>=MAX_SIZE_Y)
return 0;
把目标格添加进开启列表
//addtoopenlist(hx,hy);
//这时候路径被找到
if(hx==endx&&hy==endy)
{
table[hx][hy].parent=&table[curx][cury];
return 1;
}
//如果它不可通过或者已经在关闭列表中,略过它
if(table[hx][hy].pass==0)
{
return 0;
}
//cout << "search closelist " << hx <<"," << hy << endl;
if(search(&closelist,hx,hy)==1)
{
//cout << "hx hy already in closelist " << hx <<"," << hy << endl;
return 0;
}
//如果它不在开启列表中,把它添加进去。把当前格作为这一格的父节点。记录这一格的F,G,和H值。
if(search(&openlist,hx,hy)==0)
{
if(addtoopenlist(hx,hy)==1)
{
//cout << "add to openlist success " << hx <<"," << hy << endl;
}
table[hx][hy].parent=&table[curx][cury];
table[hx][hy].gvalue=calculateGvalue(hx,hy,table[curx][cury].x,table[curx][cury].y,table[curx][cury].gvalue);
table[hx][hy].hvalue=calculateHvalue(hx,hy);
table[hx][hy].fvalue=table[hx][hy].gvalue+table[hx][hy].hvalue;
}
else
{
//cout << "hx hy already in openlist "<< hx <<"," << hy << endl;
//更低的G值意味着更好的路径。如果是这样,就把这一格的父节点改成当前格,并且重新计算这一格的G和F值。
//如果你保持你的开启列表按F值排序,改变之后你可能需要重新对开启列表排序。
if(calculateGvalue(hx,hy,table[curx][cury].x,table[curx][cury].y,table[curx][cury].gvalue)fvalue;
while(1)
{
if(p==NULL)
{
break;
}
if(p->fvaluefvalue;
q = p;
}
p = p->next;
}
return q;
}
int computervalue(int curx,int cury)
{//对每一个当前节点执行以下操作
if(handlenode(curx-1,cury-1,curx,cury)==1)
return 1;
if(handlenode(curx-1,cury,curx,cury)==1)
return 1;
if(handlenode(curx-1,cury+1,curx,cury)==1)
return 1;
if(handlenode(curx,cury-1,curx,cury)==1)
return 1;
if(handlenode(curx,cury+1,curx,cury)==1)
return 1;
if(handlenode(curx+1,cury-1,curx,cury)==1)
return 1;
if(handlenode(curx+1,cury,curx,cury)==1)
return 1;
if(handlenode(curx+1,cury+1,curx,cury)==1)
return 1;
return 0;
}
void readmap()
{
ifstream infile;
infile.open("map.txt"); //注意文件的路径
infile>>MAX_SIZE_X>>MAX_SIZE_Y; //两行数据可以连续读出到变量里
for(int i=0;i> x;
table[i][j].pass=x;
}
}
infile.close();
return ;
}
void main()
{
tnode *pp;
openlist.next=NULL;
closelist.next=NULL;
MAX_SIZE_X=500;
MAX_SIZE_Y=500;
for (int i=0;i > x>> y;
// if(x==-1&&y==-1)
// {
// break;
// }
// table[x][y].pass=0;
//}
cout << "输入起始的位置,格式为坐标X 坐标Y " <> startx>> starty;
cout << "输入结束的位置,格式为坐标X 坐标Y " <> endx>> endy;
if(MAX_SIZE<=100)
{
for (int i=0;i x,p->y)==1)
{
//cout << "delete from openlist success " << p->x <<"," << p->y << endl;
}
if(addtocloselist(p->x,p->y)==1)
{
//cout << "add to closelist success " << p->x <<"," << p->y << endl;
}
//把目标格添加进了开启列表,这时候路径被找到
//break;
if(computervalue(p->x,p->y)==1)
{
break;
}
}
finish = clock();
duration = (double)(finish - start)/CLOCKS_PER_SEC;
printf( "using %lf seconds\n", duration );
pp=&table[endx][endy];
pp->next=NULL;
while(1)
{
if(pp->parent==NULL)
break;
pp->parent->next=pp;
pp=pp-> parent;
}
while(1)
{
if(pp->next==NULL)
break;
cout << "("< x<<","<< pp-> y <<")"<< " => ";
pp=pp-> next;
}
cout <<"("<
附:地图文件
50 50
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
你可能感兴趣的:(算法学习)
算法学习笔记:7.Dijkstra 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
在计算机科学领域,图论算法一直占据着重要地位,其中Dijkstra算法作为求解单源最短路径问题的经典算法,被广泛应用于路径规划、网络路由等多个场景。无论是算法竞赛、实际项目开发,还是计算机考研408的备考,Dijkstra算法都是必须掌握的核心内容。一、Dijkstra算法的基本概念Dijkstra算法是由荷兰计算机科学家EdsgerW.Dijkstra在1956年提出的,用于解决带权有向图或无向
算法学习day6----双指针-最长不重复子序列
阴暗老鼠人
学习
Givenanintegersequenceoflengthn,pleasefindthelongestcontinuousintervalwithoutduplicatenumbersandoutputitslength.Thefirstlinecontainsanintegern.Thesecondlinecontainsnintegers(allwithintherangeof0to105)
关联规则算法学习—Apriori
Did然
数据挖掘 算法 学习 python 数据挖掘
关联规则算法学习—Apriori一、实验项目:关联规则算法学习项目性质:设计型二、实验目的:理解并掌握关联规则经典算法Apriori算法,理解算法的原理,能够实现算法,并对给定的数据集进行关联规则挖掘三、实验内容:1、实现Apriori算法,验证算法的正确性,并将算法应用于给定的数据集Groceries,根据设定的支持度和置信度,挖掘出符合条件的频繁项集及关联规则。2、挑选几个有代表性的频繁项集和
【分治算法】【Python实现】Strassen矩阵乘法
「已注销」
# 分治算法 分治算法 Python
文章目录@[toc]问题描述基础算法时间复杂性Strassen算法时间复杂性问题时间复杂性Python实现个人主页:丷从心·系列专栏:分治算法学习指南:算法学习指南问题描述设AAA和BBB是两个n×nn\timesnn×n矩阵,AAA和BBB的乘积矩阵CCC中元素cij=∑k=1naikbkjc_{ij}=\displaystyle\sum\limits_{k=1}^{n}{a_{ik}b_{kj
【数据挖掘】分类算法学习—ID3
会的全对٩(ˊᗜˋ*)و
数据挖掘 数据挖掘 分类 学习 经验分享 ID3
分类算法学习—ID3ID3(IterativeDichotomiser3)是一种经典的决策树学习算法,由RossQuinlan于1986年提出,主要用于处理离散特征的分类问题。其核心思想是通过信息增益选择最优特征进行节点分裂,递归构建决策树。要求:理解并掌握ID3算法,理解算法的原理,能够实现算法,并对给定的数据集进行分类,分析个人参股的情况代码实现:importpandasaspdimportn
视觉感知BEV算法学习路线
LQS2020
计算机视觉
学习视觉感知BEV(Bird’sEyeView)算法涉及多个方面的知识和技能。以下是一个系统化的学习路线图,可以帮助你逐步掌握BEV算法。1.基础知识学习1.1计算机视觉基础图像处理:了解图像的基本操作,如滤波、边缘检测、特征提取。推荐书籍:《DigitalImageProcessing》byRafaelC.GonzalezandRichardE.Woods特征提取和描述:学习SIFT、SURF、
算法学习day10----单链表习题
阴暗老鼠人
算法 学习
刚把单链表的内容更新完,马不停蹄来了习题前面我们说道,单链表是一个非常结构化的开发数据类型,当我们对链表进行操作时,基于在操作开始前的链表创建、增删查改操作函数的调用,至于调用顺序、调用次数,则取决于题目要求。前排部分结构化开发没毛病,但是有几个需要注意的点,对于第k个插入与删除的数,是按照输入的时间顺序发生的:例如:操作1:H1->链表:1,nodes[1]=节点1操作2:I12->在节点1后面
算法学习day11----双链表--概念
阴暗老鼠人
学习
双链表实际上就是单链表增加一个往前指的指针,通过前面单链表的学习,我们知道链表的创建需要两步,一步是指针创建,一步是初始化的头部元素(头节点)创建,那我们增加一个往前的指针,自然也需要配套的尾部元素初始化(尾节点)在对链表进行操作函数定义时,不仅要像单链表那样指明从左到右的next,也要有从右到左的prior在代码的改动上只需加上一行即可,比较容易理解classLNode:def__init__(
图像基础算法学习笔记
jerry201108
视觉基础知识 学习 笔记 计算机视觉
目录概要一、图像采集二、图像标注四、图像几何变换五、图像边缘检测Sobel算子Scharrt算子Laplacian算子Canny边缘检测六、形态学转换十三、图像去噪概要参考书籍:《机器视觉与人工智能应用开发技术》廖建尚,钟君柳出版时间:2024-02-01图像采集图像标注:绘制直线、矩阵、圆形、椭圆和多边形图像灰度转换:灰度化、二值化等图像转换方法图像几何变换:图像旋转、图像镜像、图像缩放、图像透
LeetCode第261题_以图判树
@蓝莓果粒茶
算法 leetcode 算法 职场和发展 c# 学习 python c++
LeetCode第261题:以图判树文章摘要本文详细解析LeetCode第261题"以图判树",这是一道图论问题。文章提供了从DFS到并查集的多种解法,包含C#、Python、C++三种语言实现,配有详细的算法步骤图解和性能分析。适合想要深入理解图论算法和树的性质的算法学习者。核心知识点:图论、DFS、BFS、并查集、树的性质难度等级:中等推荐人群:图论学习者、算法面试准备者题目描述给定从0到n-
c++算法学习3——深度优先搜索
卫青~护驾!
深度优先 算法
一、深度优先搜索的核心概念DFS算法是一种通过递归或栈实现的"一条路走到底"的搜索策略,其核心思想是:深度优先:从起点出发,选择一个方向探索到底,直到无路可走回溯机制:遇到死路时返回最近的分叉点尝试其他路径状态标记:记录已访问位置,避免重复访问二、迷宫问题的DFS解法框架1.题目引入:给定一个n×n的迷宫矩阵,判断是否存在从左上角(0,0)到右下角(n-1,n-1)的通路。移动规则如下:移动方向:
算法学习Day01 | 数组理论基础、LeetCode 704.二分查找、LeetCode 27.移除元素
不会写代码的里奇
算法 算法 leetcode 数据结构 c++ 面试 c语言 笔记
一、数组理论基础定义:数组是存放在连续内存空间上的相同类型数据的集合。数组可以通过下标索引的方式获取到下标下对应的数据。特点:数组下标是从0开始的。数组内存空间的地址是连续的。数据支持随机访问,根据下标(索引)随机访问的时间复杂度为O(1)。数组的元素是不能删的,只能覆盖。数组是如何支持随机访问的数组支持随机访问的原因是因为它们在内存中是连续存储的。可以通过简单地使用数组索引来直接计算出元素在内存
算法学习day01(二分\双指针\滑动窗口\链表)
梦想成为java高手!
算法 学习 javascript
一、二分法首先,二分法搜索的前提是数组必须是有序的。然后在一个有序的数组里面找到目标值。while(leftnums[mid]更新左边界left=mid+1如果相等,说明找到了,returnmid;}注意的点:while循环中的条件是影响到下面更新边界操作的。借助一下开闭区间来理解(卡尔那边学到的)1.如果是leftnums[fast]*num[fast])result[size--]=nums[
CCPC比赛与算法学习的个人分享
风-中
算法 算法 学习
大赛简介中国大学生程序设计竞赛(ChinaCollegiateProgrammingContest,简称CCPC)是工业和信息化部教育与考试中心主办的“强国杯”技术技能大赛项目,自从2015年首届CCPC竞赛以来,赛事规模发展迅猛,竞赛影响力持续提升,为我国IT业的发展培养和选拔了大批人才。CCPC得到了诸多企业的支持。2021年一汽红旗为总赞助商,腾讯、快手、图森未来、华为云、轻舟智航为金牌赞助
c++算法学习5——贪心算法
卫青~护驾!
算法
一、贪心算法的原理贪心算法(GreedyAlgorithm)是一种在每一步选择中都采取当前最优决策的策略,通过局部最优解的累积逼近全局最优解。其核心思想是“着眼当前,忽略整体”,适用于满足最优子结构和贪心选择性质的问题。本文以阿里巴巴运宝藏问题为切入点,深入解析贪心算法的设计步骤、验证方法及经典应用。二、贪心算法的核心思想贪心算法需满足三个关键步骤:确定最优子结构问题可分解为多个子问题,且子问题的
算法学习之——二分法解题超详细
与宇宙对视
算法 算法
【二分法】解题步骤超详细!什么是二分法二分法的通用格式寻找一个数(基本的二分搜索)什么是二分法二分法,也称为折半法,是一种在有序数组中查找特定元素的搜索算法。二分法查找的思路如下:(1)首先,从数组的中间元素开始搜索,如果该元素正好是目标元素,则搜索过程结束,否则执行下一步。(2)如果目标元素大于/小于中间元素,则在数组大于/小于中间元素的那一半区域查找,然后重复步骤(1)的操作。(3)如果某一步
打卡第十二天
wswlqsss
机器学习
超参数调整专题2三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法学习优化算法的思路(避免浪费无效时间)作业:今天以自由探索的思路为主,尝试检索资料、视频、文档,用尽可能简短但是清晰的语言看是否能说清楚这三种算法每种算法的实现逻辑,帮助更深入的理解。ps:我之前写论文也用过这几种算法,也是纯借鉴对于实际实现逻辑没有了解过。遗传算法基于自然选择和遗传机制的优化算法,孟德尔随机化,模仿生物进化过
0020算法笔记动态规划最优二叉搜索树问题资源介绍
傅阳轩
0020算法笔记动态规划最优二叉搜索树问题资源介绍【下载地址】0020算法笔记动态规划最优二叉搜索树问题资源介绍本项目深入探讨了动态规划在最优二叉搜索树问题中的应用,通过详细的问题分析和实例展示,帮助读者掌握动态规划的核心原理。内容涵盖问题背景、动态规划方法及其具体应用,并配有案例分析,直观呈现解题过程。适合有一定编程基础且对算法感兴趣的读者,旨在提升其解决实际问题的能力,助力算法学习与应用的进阶
python学习day12
一叶知秋秋
python学习笔记 学习
超参数调整专题2三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法学习优化算法的思路(避免浪费无效时间)三种算法都是优化器,用来求最佳参数的组合,使得指标达到最优,区别在于每一个算法的策略有所区别。下表是总体介绍。遗传算法策略是以适应度为评价指标(可以是一些结果方面的指标),通过选择,交叉和变异三种操作,生成子代,作为新的种群去替换旧的种群(保留适应度高的个体),循环往复,知到适应度收敛或者
目标检测领域最新突破:2025年你必须掌握的5大创新方向!附教程!
学算法的程霖
目标检测 人工智能 计算机视觉 机器学习 深度学习 自然语言处理 大模型
目标检测是计算机视觉的核心任务之一,涉及算法学习、应用场景优化和学术创新三个关键方向。以下是系统的总结和建议:一、目标检测算法学习方向1.基础理论核心任务:定位(BoundingBox)+分类(Class)。关键概念:IoU(交并比)、NMS(非极大值抑制)、Anchor机制。损失函数:分类损失(Cross-Entropy)、回归损失(SmoothL1、GIoU)。必学经典模型:Two-Stage
数据结构与算法学习笔记----Kruskal算法
明月清了个风
数据结构与算法笔记(基础课) 算法 学习 笔记
数据结构与算法学习笔记----Kruskal算法@@author:明月清了个风@@firstpublishtime:2024.12.21ps⭐️这也是一个思想比较简单的算法,只写了基本思想,具体的可以看代码理解一下Kruskal算法Kruskal算法同样是一种基于贪心策略的最小生成树求解算法,另一种是上一篇中的Prim算法。基本思想将所有的边按边长从小到大排序。遍历所有边,判断每条边所连接的两个节
数据结构与算法学习笔记----字符串哈希
明月清了个风
数据结构与算法笔记(基础课) 哈希算法 学习 笔记
数据结构与算法学习笔记----字符串哈希@@author:明月清了个风@@firstpublish:2024.12.4字符串哈希(stringhash)字符串哈希和上一篇的整数哈希一样,通过将字符串映射到一个数字来表示该字符串,只是对于字符串来说,这个哈希函数映射的方法会更特殊。实现原理(多项式哈希)基本的思想是通过将字符串中的每个字符映射到一个数字,通常使用ASCII码值,通过加权求和的方式计算
数据结构与算法学习笔记----Floyd算法
明月清了个风
数据结构与算法笔记(基础课) 学习 笔记 算法
数据结构与算法学习笔记----Floyd算法@@author:明月清了个风@@firstpublishtime:2024.12.20Floyd算法Floyd一种基于动态规划的最短路径算法,用于求出加权有向图中的任意两点之间的最短路径问题,并且适用于图中可能存在负权边的情况,但是要求不能有负权环,它能有效的求出图中所有节点之间的最短路径,适用稠密图。基本思路Floyd通过不断考虑每个节点作为中间节点
机器学习聚类算法---K-Means算法
安替-AnTi
机器学习 机器学习 聚类算法 KMeans
文章目录引言K-means聚类算法K-means算法的相关描述K-means算法的工作流程K-means聚类算法后处理二分K-means算法可视化界面本章小结参考文献引言先说个K-means算法很高大上的用处,来开始新的算法学习。我们都知道每一届的美国总统大选,那叫一个竞争激烈。可以说,谁拿到了各个州尽可能多的选票,谁选举获胜的几率就会非常大。有人会说,这跟K-means算法有什么关系?当然,如果
Python5.2打卡(day12)
朝朝辞暮i
python训练营打卡 python
超参数调整专题2三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法学习优化算法的思路(避免浪费无效时间)作业:今天以自由探索的思路为主,尝试检索资料、视频、文档,用尽可能简短但是清晰的语言看是否能说清楚这三种算法每种算法的实现逻辑,帮助更深入的理解。以下是对三种启发式算法的核心逻辑解析及代码示例,以“寻找函数最小值”为统一场景(目标函数f(x)=x²),帮助快速理解其差异。一、算法核心逻辑对
day12python打卡
qq_58459892
py打开学习 python
超参数调整专题2三种启发式算法的示例代码:遗传算法、粒子群算法、退火算法学习优化算法的思路(避免浪费无效时间)作业:今天以自由探索的思路为主,尝试检索资料、视频、文档,用尽可能简短但是清晰的语言看是否能说清楚这三种算法每种算法的实现逻辑,帮助更深入的理解。1.遗传算法(GeneticAlgorithm,GA)核心思想:模拟生物进化中的“自然选择,适者生存”机制,通过迭代优化种群中的个体。关键步骤:
数据结构入门要点:算法学习的重点关注
AI天才研究院
ChatGPT AI大模型应用入门实战与进阶 数据结构 算法 学习 ai
数据结构入门要点:算法学习的重点关注关键词:数据结构、算法分析、时间复杂度、空间复杂度、线性数据结构、非线性数据结构、实战应用摘要:本文系统梳理数据结构入门核心要点,聚焦算法学习的关键维度。从基础概念体系构建出发,深入解析数据结构与算法的内在联系,详细阐述时间/空间复杂度分析方法。通过Python代码实现线性结构(数组、链表、栈、队列)和非线性结构(树、图)的核心操作,结合数学模型与实际案例演示复
主流优化算法学习率更新公式总结
星光银河
深度学习 算法 学习 机器学习 人工智能 深度学习
1.随机梯度下降(SGD)学习率调整:固定全局学习率,无自适应机制。公式:θt=θt−1−η⋅gtη:全局学习率(需手动设置)。gt=∇θJ(θt−1):当前梯度。2.带动量的SGD(SGDwithMomentum)学习率调整:引入动量项加速收敛,但学习率仍固定。公式:vt=β⋅vt−1+gtθt=θt−1−η⋅vtβ:动量衰减率(通常0.9)。vt:动量累积量。3.Adagrad学习率调整:自适
蓝桥杯算法学习纪实——递归实现排列型枚举
求索1908
蓝桥算法学习 算法 学习
94.递归实现排列型枚举-AcWing题库我的思路:多分支递归,即,递归搜索树。关键点在于,如何判断每一层递归的分支数,即每层递归要嵌套调用自身多少次。相对于上题组合型的枚举,本题每层递归的分支数从n逐层递减至0(递归的底);而递归最重要的就是“形式相同”,如果在递归函数中写死每层递归分支数,那将不再适用此题。而上题就是固定的两个分支,代码如下:蓝桥杯算法学习纪实——递归实现指数型枚举-CSDN博
十、动态规划算法学习2(代码随想录学习)
念秋乐晚
算法学习 算法 动态规划 学习
16.目标和leetcode链接思路:将数组分为左右两部分,左边部分为加,右边部分为减。假设左边和为x,右边和即为sum-x。因此target=x-(sum-x),那么x=(target+sum)/2。可将本题转换为求左半部分,即选取部分元素为x的情况总数。写法1:利用二维数组dp[i][j]表示在0-i中选择一些数之和正好为j的情况数初始化:第一行中,dp[0][nums[0]]=1第一列,由于
springmvc 下 freemarker页面枚举的遍历输出
杨白白
enum freemarker
spring mvc freemarker 中遍历枚举
1枚举类型有一个本地方法叫values(),这个方法可以直接返回枚举数组。所以可以利用这个遍历。
enum
public enum BooleanEnum {
TRUE(Boolean.TRUE, "是"), FALSE(Boolean.FALSE, "否");
实习简要总结
byalias
工作
来白虹不知不觉中已经一个多月了,因为项目还在需求分析及项目架构阶段,自己在这段
时间都是在学习相关技术知识,现在对这段时间的工作及学习情况做一个总结:
(1)工作技能方面
大体分为两个阶段,Java Web 基础阶段和Java EE阶段
1)Java Web阶段
在这个阶段,自己主要着重学习了 JSP, Servlet, JDBC, MySQL,这些知识的核心点都过
了一遍,也
Quartz——DateIntervalTrigger触发器
eksliang
quartz
转载请出自出处:http://eksliang.iteye.com/blog/2208559 一.概述
simpleTrigger 内部实现机制是通过计算间隔时间来计算下次的执行时间,这就导致他有不适合调度的定时任务。例如我们想每天的 1:00AM 执行任务,如果使用 SimpleTrigger,间隔时间就是一天。注意这里就会有一个问题,即当有 misfired 的任务并且恢复执行时,该执行时间
Unix快捷键
18289753290
unix Unix;快捷键;
复制,删除,粘贴:
dd:删除光标所在的行 &nbs
获取Android设备屏幕的相关参数
酷的飞上天空
android
包含屏幕的分辨率 以及 屏幕宽度的最大dp 高度最大dp
TextView text = (TextView)findViewById(R.id.text);
DisplayMetrics dm = new DisplayMetrics();
text.append("getResources().ge
要做物联网?先保护好你的数据
蓝儿唯美
数据
根据Beecham Research的说法,那些在行业中希望利用物联网的关键领域需要提供更好的安全性。
在Beecham的物联网安全威胁图谱上,展示了那些可能产生内外部攻击并且需要通过快速发展的物联网行业加以解决的关键领域。
Beecham Research的技术主管Jon Howes说:“之所以我们目前还没有看到与物联网相关的严重安全事件,是因为目前还没有在大型客户和企业应用中进行部署,也就
Java取模(求余)运算
随便小屋
java
整数之间的取模求余运算很好求,但几乎没有遇到过对负数进行取模求余,直接看下面代码:
/**
*
* @author Logic
*
*/
public class Test {
public static void main(String[] args) {
// TODO A
SQL注入介绍
aijuans
sql注入
二、SQL注入范例
这里我们根据用户登录页面
<form action="" > 用户名:<input type="text" name="username"><br/> 密 码:<input type="password" name="passwor
优雅代码风格
aoyouzi
代码
总结了几点关于优雅代码风格的描述:
代码简单:不隐藏设计者的意图,抽象干净利落,控制语句直截了当。
接口清晰:类型接口表现力直白,字面表达含义,API 相互呼应以增强可测试性。
依赖项少:依赖关系越少越好,依赖少证明内聚程度高,低耦合利于自动测试,便于重构。
没有重复:重复代码意味着某些概念或想法没有在代码中良好的体现,及时重构消除重复。
战术分层:代码分层清晰,隔离明确,
布尔数组
百合不是茶
java 布尔数组
androi中提到了布尔数组;
布尔数组默认的是false, 并且只会打印false或者是true
布尔数组的例子; 根据字符数组创建布尔数组
char[] c = {'p','u','b','l','i','c'};
//根据字符数组的长度创建布尔数组的个数
boolean[] b = new bool
web.xml之welcome-file-list、error-page
bijian1013
java web.xml servlet error-page
welcome-file-list
1.定义:
<welcome-file-list>
<welcome-file>login.jsp</welcome>
</welcome-file-list>
2.作用:用来指定WEB应用首页名称。
error-page1.定义:
<error-page&g
richfaces 4 fileUpload组件删除上传的文件
sunjing
clear Richfaces 4 fileupload
页面代码
<h:form id="fileForm"> <rich:
技术文章备忘
bit1129
技术文章
Zookeeper
http://wenku.baidu.com/view/bab171ffaef8941ea76e05b8.html
http://wenku.baidu.com/link?url=8thAIwFTnPh2KL2b0p1V7XSgmF9ZEFgw4V_MkIpA9j8BX2rDQMPgK5l3wcs9oBTxeekOnm5P3BK8c6K2DWynq9nfUCkRlTt9uV
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: on near line 1解决方案
白糖_
Hibernate
文章摘自:http://blog.csdn.net/yangwawa19870921/article/details/7553181
在编写HQL时,可能会出现这种代码:
select a.name,b.age from TableA a left join TableB b on a.id=b.id
如果这是HQL,那么这段代码就是错误的,因为HQL不支持
sqlserver按照字段内容进行排序
bozch
按照内容排序
在做项目的时候,遇到了这样的一个需求:
从数据库中取出的数据集,首先要将某个数据或者多个数据按照地段内容放到前面显示,例如:从学生表中取出姓李的放到数据集的前面;
select * fro
编程珠玑-第一章-位图排序
bylijinnan
java 编程珠玑
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.Random;
public class BitMapSearch {
Java关于==和equals
chenbowen00
java
关于==和equals概念其实很简单,一个是比较内存地址是否相同,一个比较的是值内容是否相同。虽然理解上不难,但是有时存在一些理解误区,如下情况:
1、
String a = "aaa";
a=="aaa";
==> true
2、
new String("aaa")==new String("aaa
[IT与资本]软件行业需对外界投资热情保持警惕
comsci
it
我还是那个看法,软件行业需要增强内生动力,尽量依靠自有资金和营业收入来进行经营,避免在资本市场上经受各种不同类型的风险,为企业自主研发核心技术和产品提供稳定,温和的外部环境...
如果我们在自己尚未掌握核心技术之前,企图依靠上市来筹集资金,然后使劲往某个领域砸钱,然
oracle 数据块结构
daizj
oracle 块 数据块 块结构 行目录
oracle 数据块是数据库存储的最小单位,一般为操作系统块的N倍。其结构为:
块头--〉空行--〉数据,其实际为纵行结构。
块的标准大小由初始化参数DB_BLOCK_SIZE指定。具有标准大小的块称为标准块(Standard Block)。块的大小和标准块的大小不同的块叫非标准块(Nonstandard Block)。同一数据库中,Oracle9i及以上版本支持同一数据库中同时使用标
github上一些觉得对自己工作有用的项目收集
dengkane
github
github上一些觉得对自己工作有用的项目收集
技能类
markdown语法中文说明
回到顶部
全文检索
elasticsearch
bigdesk elasticsearch管理插件
回到顶部
nosql
mapdb 支持亿级别map, list, 支持事务. 可考虑做为缓存使用
C
初二上学期难记单词二
dcj3sjt126com
english word
dangerous 危险的
panda 熊猫
lion 狮子
elephant 象
monkey 猴子
tiger 老虎
deer 鹿
snake 蛇
rabbit 兔子
duck 鸭
horse 马
forest 森林
fall 跌倒;落下
climb 爬;攀登
finish 完成;结束
cinema 电影院;电影
seafood 海鲜;海产食品
bank 银行
8、mysql外键(FOREIGN KEY)的简单使用
dcj3sjt126com
mysql
一、基本概念
1、MySQL中“键”和“索引”的定义相同,所以外键和主键一样也是索引的一种。不同的是MySQL会自动为所有表的主键进行索引,但是外键字段必须由用户进行明确的索引。用于外键关系的字段必须在所有的参照表中进行明确地索引,InnoDB不能自动地创建索引。
2、外键可以是一对一的,一个表的记录只能与另一个表的一条记录连接,或者是一对多的,一个表的记录与另一个表的多条记录连接。
3、如
java循环标签 Foreach
shuizhaosi888
标签 java循环 foreach
1. 简单的for循环
public static void main(String[] args) {
for (int i = 1, y = i + 10; i < 5 && y < 12; i++, y = i * 2) {
System.err.println("i=" + i + " y="
Spring Security(05)——异常信息本地化
234390216
exception Spring Security 异常信息 本地化
异常信息本地化
Spring Security支持将展现给终端用户看的异常信息本地化,这些信息包括认证失败、访问被拒绝等。而对于展现给开发者看的异常信息和日志信息(如配置错误)则是不能够进行本地化的,它们是以英文硬编码在Spring Security的代码中的。在Spring-Security-core-x
DUBBO架构服务端告警Failed to send message Response
javamingtingzhao
架构 DUBBO
废话不多说,警告日志如下,不知道有哪位遇到过,此异常在服务端抛出(服务器启动第一次运行会有这个警告),后续运行没问题,找了好久真心不知道哪里错了。
WARN 2015-07-18 22:31:15,272 com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(84)
JS中Date对象中几个用法
leeqq
JavaScript Date 最后一天
近来工作中遇到这样的两个需求
1. 给个Date对象,找出该时间所在月的第一天和最后一天
2. 给个Date对象,找出该时间所在周的第一天和最后一天
需求1中的找月第一天很简单,我记得api中有setDate方法可以使用
使用setDate方法前,先看看getDate
var date = new Date();
console.log(date);
// Sat J
MFC中使用ado技术操作数据库
你不认识的休道人
sql mfc
1.在stdafx.h中导入ado动态链接库
#import"C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF","end")2.在CTestApp文件的InitInstance()函数中domodal之前写::CoIniti
Android Studio加速
rensanning
android studio
Android Studio慢、吃内存!启动时后会立即通过Gradle来sync & build工程。
(1)设置Android Studio
a) 禁用插件
File -> Settings... Plugins 去掉一些没有用的插件。
比如:Git Integration、GitHub、Google Cloud Testing、Google Cloud
各数据库的批量Update操作
tomcat_oracle
java oracle sql mysql sqlite
MyBatis的update元素的用法与insert元素基本相同,因此本篇不打算重复了。本篇仅记录批量update操作的
sql语句,懂得SQL语句,那么MyBatis部分的操作就简单了。 注意:下列批量更新语句都是作为一个事务整体执行,要不全部成功,要不全部回滚。
MSSQL的SQL语句
WITH R AS(
SELECT 'John' as name, 18 as
html禁止清除input文本输入缓存
xp9802
input
多数浏览器默认会缓存input的值,只有使用ctl+F5强制刷新的才可以清除缓存记录。如果不想让浏览器缓存input的值,有2种方法:
方法一: 在不想使用缓存的input中添加 autocomplete="off"; eg: <input type="text" autocomplete="off" name