算法原理参考自 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
你可能感兴趣的:(算法学习)
c语言输入两个字符串 按字典数序比较大小,算法学习笔记(一)C++排序函数、映射技巧与字典树...
Nature自然科研
c语言输入两个字符串 按字典数序比较大小
1.头文件algorithm中有函数sort()用于排序,参数为:排序起始地址,排序结束地址,排序规则(返回bool型)例如,要将array[]={5,7,1,2,9}升序排列,则使用:boolcmp(inta,intb);intmain(){intarray[]={5,7,1,2,9};sort(array,array+5,cmp);for(inti=0;icoutb)returnfalse;e
推荐算法学习记录2.2——kaggle数据集的动漫电影数据集推荐算法实践——基于内容的推荐算法、协同过滤推荐
萱仔学习自我记录
推荐算法学习 python matplotlib 开发语言
1、基于内容的推荐:这种方法根据项的相关信息(如描述信息、标签等)和用户对项的操作行为(如评论、收藏、点赞等)来构建推荐算法模型。它可以直接利用物品的内容特征进行推荐,适用于内容较为丰富的场景。#1.基于内容的推荐算法fromsklearn.feature_extraction.textimportTfidfVectorizerfromsklearn.metrics.pairwiseimport
邓俊辉数据结构与算法学习笔记-第五章
xiaodidadada
数据结构与算法
文章目录树aa1树a2应用a3有根树a4有序树a5路径a6连通图无环图a7深度层次b在计算机中表示b1树的表示b2父节点b3孩子节点b4父亲孩子表示法b5长子兄弟表示法c二叉树c1二叉树概述c2真二叉树c3描述多叉树d二叉树d1BinNode类d2BinNode接口d3BinTree类d4高度更新d5节点插入e相关算法e1-1先序遍历转化策略e1-2遍历规则e1-3递归实现e1-4迭代实现e1-5
2024.8.14-算法学习(原创+转载)
蓝纹绿茶
算法 学习 人工智能
一、投机采样图源自投机采样推理原理-66Ring'sBlog投机采样(SpeculativeDecoding)是Google和DeepMind在2022年同时发现的大模型推理加速方法。它可以在不损失生成效果前提下,获得3x以上的加速比。大型语言模型(LLM)的推理通常需要使用自回归采样。它们的推理过程相当缓慢,需要逐个token地进行串行解码。生成每个标记都需要将所有参数从存储单元传输到计算单元,
算法学习-2024.8.16
蓝纹绿茶
学习
一、Tensorrt学习补充TensorRT支持INT8和FP16的计算。深度学习网络在训练时,通常使用32位或16位数据。TensorRT则在网络的推理时选用不这么高的精度,达到加速推断的目的。TensorRT对于网络结构进行了重构,把一些能够合并的运算合并在了一起,针对GPU的特性做了优化。一个深度学习模型,在没有优化的情况下,比如一个卷积层、一个偏置层和一个reload层,这三层是需要调用三
算法学习每日一题数位不同的组合
故里
算法 学习
Problem:3153.所有数对中数位不同之和思路本题关键在于如何处理数位不同的个数,其实就是组合问题,两个不同数字的不同数位只能算一对,所以我们不妨把后方元素与前方元素数位不同算作一对,保持单调性避免重复计数。那么后方元素不同的数位应该如何统计呢,我们不妨使用哈希表,一维表示统计的数位位数,二维表示数位0~9。某一数位位数下数位与前方元素不同的个数,就是当前遍历到的所有元素数目-该数位相同的元
算法学习笔记-复杂度分析上
胖琪的升级之路
如何分析、统计算法的执行效率和资源消耗为什么需要复杂度分析首先我们很多程序都可以通过统计,监控等方式帮助我们得到程序执行的时间与占用的内存大小。但是这些统计方法有很大的局限性。测试结果非常依赖测试环境。不同的测试机器,同样的代码执行效率就不同。测试结果数受数据规模的影响很大。数据规模大,我们的代码执行效率低。测试结果不能真正的反应我们的内容大O复杂度表示法我们假设一行代码执行一次的时间是unit_
粒子群优化算法和强化算法的优缺点对比,以表格方式进行展示。详细解释
资源存储库
笔记 笔记
粒子群优化算法(PSO)和强化学习算法(RL)是两种常用的优化和学习方法。以下是它们的优缺点对比,以表格的形式展示:特性粒子群优化算法(PSO)强化学习算法(RL)算法类型优化算法学习算法主要用途全局优化问题,寻找最优解学习和决策问题,优化策略以最大化长期奖励计算复杂度较低,通常不需要梯度信息;计算复杂度与粒子数量和迭代次数有关较高,涉及到策略网络的训练和环境交互;复杂度取决于状态空间、动作空间以
算法学习6——贪心算法
零 度°
算法学习 算法 学习 贪心算法
什么是贪心算法?贪心算法是一种在每一步选择中都采取当前状态下最优或最有利的选择的算法。其核心思想是通过一系列局部最优选择来达到全局最优解。贪心算法广泛应用于各种优化问题,如最短路径、最小生成树、背包问题等。贪心算法的特点局部最优选择:每一步都做出在当前情况下最优的选择。无后效性:一旦某个状态被确定,就不会再被改变或回溯。逐步构造解决方案:通过一系列的选择逐步构建出最终的解决方案。经典例子及其Pyt
代码随想录算法训练营第三十五天| 121. 买卖股票的最佳时机,122.买卖股票的最佳时机II,123.买卖股票的最佳时机III
无敌的平衡步兵
算法打卡 算法 数据结构 动态规划 贪心算法 leetcode
今天是动态规划算法学习的第八天,也是买卖股票的一天。涉及到了使用多维数组来表示不同的状态,然后进行状态转移。121.买卖股票的最佳时机题目链接:121.买卖股票的最佳时机-力扣(LeetCode)这个题目是给出一个数组表示股票每天的价格,只能进行一次股票的买卖。求解所能获得的最大利润。我自己的做法是用前缀和,求每个数右边最大的数,然后求最大的差值。具体代码如下所示:classSolution{pu
代码随想录算法训练营第二十一天| 39. 组合总和, 40.组合总和II, 131.分割回文串
无敌的平衡步兵
算法打卡 算法 数据结构 leetcode 职场和发展 剪枝
今天是回溯算法学习的第二天,主要的学习内容包括:1.组合问题的重复使用2.组合问题的去重3.分割问题的处理方法。39.组合总和题目链接:39.组合总和-力扣(LeetCode)这个组合问题的特点是,集合内的元素可以重复使用。与前面组合问题的区别在于,在每一次回溯中,不是从i+1的位置开始穷举,而是从i开始穷举。这样就满足元素重复使用的要求。对于剪枝操作,这个题的做法是如果求和的结果已经大于目标值,
算法学习07:KMP算法
Lhz326568
学习打卡 算法 学习 笔记 c++ 开发语言
算法学习07:KMP算法文章目录算法学习07:KMP算法前言一、KMP算法1.kmp匹配过程:2.求解next数组(kmp算法重点)3.代码总结前言提示:以下是本篇文章正文内容:一、KMP算法1.kmp匹配过程:2.求解next数组(kmp算法重点)3.代码#includeusingnamespacestd;constintN=10000+10,m=100000+10;intn,m;intp[N]
c++算法学习,力扣刷题笔记
黒№
c++ 算法
c++算法学习,力扣刷题笔记目录c++算法学习,力扣刷题笔记新手村1480.一维数组的动态和1480.一维数组的动态和C++中的位运算符例子更多位运算用法具体示例1672.最富有客户的资产总量新手村力扣新手村题目及解析,我的疑问和解答1480.一维数组的动态和题目给你一个数组nums。数组「动态和」的计算公式为:runningSum[i]=sum(nums[0]…nums[i])。请返回nums的
不错链接整理
xushuanglu_csdn
提升 学习 开源
不错链接整理算法https://github.com/MisterBooo/LeetCodeAnimation手把手撕LeetCode题目,扒各种算法套路的裤子https://github.com/labuladong/fucking-algorithm算法学习笔记https://github.com/nonstriater/Learn-Algorithms常用数据结构及其算法的Java实现,包括
【Java】零基础蓝桥杯算法学习——二分查找
xioaobai_huan
蓝桥杯算法入门学习 算法 java 蓝桥杯
算法模板一://数组arr的区间[0,left-1]满足arr[i]=k;Scannerscan=newScanner(System.in);int[]arr={1,2,3,4,5};intleft=0,right=arr.length-1;intk=scan.nextInt();while(left=k)right=mid;elseleft=mid+1;}算法模板二://数组arr的区间[0,l
【Java】零基础蓝桥杯算法学习——动态规划例题
xioaobai_huan
蓝桥杯算法入门学习 算法 java 蓝桥杯
例题:2023年第十四届蓝桥杯Java软件开发B组E题蜗牛参考解答:参考代码示例:importjava.util.Scanner;publicclassMain{staticintN=100010;staticint[]arr=newint[N];staticint[]a=newint[N];//传送带的起始坐标staticint[]b=newint[N];//第i-1根杆子的传送带的坐标stat
【Java】零基础蓝桥杯算法学习——线性动态规划(一维dp)
xioaobai_huan
蓝桥杯算法入门学习 算法 蓝桥杯 学习 java
线性dp——一维动态规划1、考虑最后一步可以由哪些状态得到,推出转移方程2、考虑当前状态与哪些参数有关系,定义几维数组来表示当前状态3、计算时间复杂度,判断是否需要进行优化。一维动态规划例题:最大上升子序列问题Java参考代码:importjava.util.Scanner;publicclassMain{publicstaticvoidmain(String[]args){Scannerscan
算法学习|Day17-二叉树|Leetcode110.平衡二叉树,Leetcode257. 二叉树的所有路径,Leetcode404.左叶子之和
ambitious_Rgr
算法 python 数据结构 leetcode 广度优先 深度优先 学习
目录一、Leetcode110.平衡二叉树题目描述解题思路方法:递归总结二、Leetcode257.二叉树的所有路径题目描述解题思路方法:递归总结三、Leetcode404.左叶子之和题目描述解题思路方法一:递归方法二:层序遍历总结一、Leetcode110.平衡二叉树题目描述给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的
数据结构与算法学习笔记(训练营三)-经典面试四
剑侠李逍遥
给你一个字符串类型的数组arr,譬如:String[]arr={"b\st","d\","a\d\e","a\b\c"};把这些路径中蕴含的目录结构给打印出来,子目录直接列在父目录下面,并比父目录向右进两格,就像这样:abcdebcstd同一级的需要按字母顺序排列不能乱。利用前缀树,让后深度优先遍历/***给你一个字符串类型的数组arr,譬如:*String[]arr={"b\st","d\","
机器学习-近邻KNN算法学习笔记
不会敲代码的陈序员
机器学习 算法 人工智能
目录一、算法定义KNN算法性能:欠拟合和过拟合KNN算法优缺点二、算法原理算法通俗解释算法的公式欧氏距离曼哈顿距离三、算法实现与应用模型搭建思路KNN算法模型源码代码运行效果图四、总结一、算法定义K最近邻(K-NearestNeighbors,KNN)算法是一种用于分类和回归的监督学习算法。KNN算法的主要思想可以简单概括如下:训练阶段:在训练阶段,KNN算法将所有的训练样本和它们对应的标签存储在
算法学习笔记 4-3 深搜(DFS)与广搜(BFS):初识问题状态空间 与 LeetCode真题(Java)
小成同学_
数据结构与算法 算法 leetcode dfs bfs java
喜欢该类型文章可以给博主点个关注,博主会持续输出此类型的文章,知识点很全面,再加上LeetCode的真题练习,每一个LeetCode题解我都写了详细注释,比较适合新手入门数据结构与算法,后续也会更新进阶的文章。课件参考—开课吧《门徒计划》4-3深搜(DFS)与广搜(BFS):初识问题状态空间搜索的核心概念首先给大家拓展一个概念,这个概念就是我们学习搜索算法中非常重要的一环:这个问题求解树是一个抽象
算法学习:双指针进阶之滑动窗口算法
2301_76884895
算法 leetcode 数据结构
文章目录一、认识滑动窗口算法二、算法运用1.最小覆盖子串2.字符串排列3.找所有字母异位词4.最长无重复字串总结一、认识滑动窗口算法本文讲的滑动窗口算法基于前面的基本的双指针技巧。在滑动窗口算法中,可以使用左右指针来记录窗口的左右边界,以及使用快慢指针来同时从两端向中间遍历数据流,从而加速算法的执行效率。滑动窗口算法的核心在于通过维护一个窗口来记录满足条件的数据,并在窗口移动的过程中更新窗口记录的
算法学习——LeetCode力扣贪心篇1
拉依达不拉胯
算法 学习 leetcode c++ c语言
算法学习——LeetCode力扣贪心篇1455.分发饼干455.分发饼干-力扣(LeetCode)描述假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。对每个孩子i,都有一个胃口值g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干j,都有一个尺寸s[j]。如果s[j]>=g[i],我们可以将这个饼干j分配给孩子i,这个孩子会得到满足。你的目标是尽可能
2.7数据结构与算法学习日记(动态规划01背包和并查集)
祺580
学习 动态规划 算法
题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你
2.8数据结构与算法学习日记(bfs和01背包和完全背包)
祺580
学习
P8673[蓝桥杯2018国C]迷宫与陷阱题目描述小明在玩一款迷宫游戏,在游戏中他要控制自己的角色离开一间由N×N个格子组成的二维迷宫。小明的起始位置在左上角,他需要到达右下角的格子才能离开迷宫。每一步,他可以移动到上下左右相邻的格子中(前提是目标格子可以经过)。迷宫中有些格子小明可以经过,我们用.表示;有些格子是墙壁,小明不能经过,我们用#表示。此外,有些格子上有陷阱,我们用X表示。除非小明处于
2.14数据结构与算法学习日记
祺580
学习 算法
洛谷P1934封印题目背景很久以前,魔界大旱,水井全部干涸,温度也越来越高。为了拯救居民,夜叉族国王龙溟希望能打破神魔之井,进入人界“窃取”水灵珠,以修复大地水脉。可是六界之间皆有封印,神魔之井的封印由蜀山控制,并施有封印。龙溟作为魔界王族,习有穿行之术,可任意穿行至任何留有空隙的位置。然而封印不留有任何空隙!龙溟无奈之下只能强行破除封印。破除封印必然消耗一定的元气。为了寻找水灵珠,龙溟必须减少体
算法学习#32 第一个错误的版本
0daydreamer0
题目详情你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有n个版本[1,2,...,n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用boolisBadVersion(version)接口来判断版本号version是否在单元测试中出错。实现一个函数来查找
[算法学习] 贝祖定理
Waldeinsamkeit41
学习
裴蜀定理://设a,b是不全为0的整数,则存在整数x,y使得ax+by=gcd(a,b)//扩展裴蜀定理://a,b为不小于0的整数,n为整数,是否存在不小于0的x和y使得ax+by=n有解?//1、若n>ab-a-b,有解//2、若n=0,有解(x=y=0)//3、若n0//设a和b的最大公约数为gcd(a,b),因为a,b,x,y均为整数,其线性组合同样是gcd(a,b)的倍数//故ax+by
算法学习——LeetCode力扣二叉树篇7
拉依达不拉胯
LeetCode算法学习 算法 学习 leetcode c++ c
算法学习——LeetCode力扣二叉树篇7236.二叉树的最近公共祖先236.二叉树的最近公共祖先-力扣(LeetCode)描述给定一个二叉树,找到该树中两个指定节点的最近公共祖先。百度百科中最近公共祖先的定义为:“对于有根树T的两个节点p、q,最近公共祖先表示为一个节点x,满足x是p、q的祖先且x的深度尽可能大(一个节点也可以是它自己的祖先)。”示例示例1:输入:root=[3,5,1,6,2,
算法学习——LeetCode力扣二叉树篇6
拉依达不拉胯
LeetCode算法学习 算法 学习 leetcode c++ c linux
算法学习——LeetCode力扣二叉树篇6617.合并二叉树617.合并二叉树-力扣(LeetCode)描述给你两棵二叉树:root1和root2。想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为null的节点将直接作为新二叉树的节点。
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