主要内容:
1.迭代法
2.蛮力法
3.分治法
4.贪心法
5.动态规划
1.迭代法
迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值得解决问题的方法,一般用于数学计算。它是我们早已熟悉的算法策略,累加、累乘都的迭代算法的基础应用。利用迭代算法策略解决问题,设计工作主要有3步:
1.确定迭代模型:根据问题描述,分析得出前一个(或几个)值与其下一个值的迭代关系数学模型。
2.建立迭代关系式:递推数学模型一般是带下标的字母,算法设计中要将其转化为"循环不变式"——迭代关系式。迭代关系式就是一个直接或间接地不断由旧值递推出新值得表达式,存储新值得变量称为迭代变量。
3.对迭代过程进行控制:确定在什么时候结束迭代过程。迭代过程的控制通常可分为两种情况:一种是已知或可以计算出所需的迭代次数,通过构建一个固定次数的循环来实现对迭代过程的控制。另一种是所需的迭代次数无法确定,需要分析出迭代过程的结束条件,有时还需考虑得不到目标解的情况,避免出现迭代过程的死循环。
穿越沙漠问题:
一辆吉普车穿越1000km的沙漠。吉普车的总装油量为500加仑,耗油率为1加仑/km,由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。若吉普车用最少的耗油量穿越沙漠,应该在哪些地方建立油库,以及各处存储的油量。
对于这个问题,我们从终点开始倒着推解储油点的位置及储油量。根据耗油量最少的目标进行分析,从后(终点)向前(起点)分段讨论:
第一段长度为500km且第一个加油点储油量为500加仑。
第二段中,为了储备油,吉普车在这段行程中必须有往返。这段一共走3次:第一、二次来回耗油量为装载量的2/3,储油量则为装载量的1/3,第三次单向行驶耗油量为装载量的1/3,储油量为装载量的2/3,这样第二个加油点的储油量为1000加仑,长度为500/3km
第三段与第二段思路相同。这一段共走5次:第一、二次来回耗油量为装载量的2/5,储油量为装载量的3/5,第三、四次来回耗油量为装载量的2/5,储油量为装载量的3/5,第五次单向行驶耗油量为装载量的1/5,储油量为装载量的4/5,这样第三个加油点储油量为1500加仑,长度为500/5km
..........
综上分析,从终点开始分别间隔500,500/3,500/5 ...(km)设立储油点,每个储油点的油量为500,1000,1500...
#include
int main()
{
int dis, k, oil,i;
int distances[10 ], oilquantities[10 ];
dis = 500 ; k = 1 ; oil = 500 ;
do
{
distances[k] = 1000 - dis;
oilquantities[k] = oil;
k = k + 1 ;
dis = dis + 500 / (2 * k - 1 );
oil = 500 * k;
} while (dis<1000 );
oil = 500 * (k - 1 ) + (1000 - dis)*(2 * k - 1 );
distances[k] = 0 ;
oilquantities[k] = oil;
for (i = k; i>=1 ; i--)
{
printf( " storepoint: %d, distance: %d, oilquantity: %d\n " , k+1 -i, distances[i],oilquantities[i]);
}
return 0 ;
}
牛顿迭代法:
牛顿迭代公式:Xn+1=Xn-f(Xn)/f'(Xn)
下面给出求形如a*x^3+b*x^2+c*x+d=0方程根的算法,求x在1附近的一个实根。
#include
#include
float f(float a, float b, float c, float d)
{
float x1 = 1 , x0, f0, f1;
do
{
x0 = x1;
f0 = ((a*x0 + b)*x0 + c)*x0 + d;
f1 = (3 * a*x0 + 2 * b)*x0 + c;
x1 = x0 - f0 / f1;
} while (fabs(x1-x0)>=exp(-4 ));
return x1;
}
int main()
{
float a, b, c, d, fx;
printf( " 输入系数a,b,c,d: " );
scanf( " %f%f%f%f " , &a, &b, &c, &d);
fx = f(a, b, c, d);
printf( " 方程的根为:%f\n " , fx);
}
2.蛮力法
蛮力法是基于计算机运算速度快的特点,在解决问题时采用的一种“懒惰”策略,它几乎不经过思考,把问题的所有情况交给计算机去尝试,从中找出问题的解。蛮力策略的应用范围很广,比如选择排序,冒泡排序,插入排序,顺序查找、朴素的字符串匹配等等。在这里我们简单了解一下蛮力策略中的枚举法。
枚举法就是根据问题中的条件将可能的情况一一列举出来,逐一尝试从中找出满足问题条件的解,有时候还需要进一步考虑,排除一些明显不合理的情况,尽量减少问题可能解的列举数目。用枚举法解决问题:
1.找出枚举范围:分析问题所涉及的各种情况
2.找出约束条件:分析问题的解需要满足的条件,并用逻辑表达式表示
百钱百鸡问题:
鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一;百钱买百鸡,翁、母、雏各几何?
#include
int main()
{
int x, y, z;
for (x = 1 ; x <= 20 ; x++)
{
for (y = 1 ; y <= 33 ; y++)
{
z = 100 - x - y;
if (z % 3 == 0 && 5 * x + 3 * y + z / 3 == 100 )
printf( " the cock number is %d,the hen number is %d,the chick number is %d\n " ,x,y,z);
}
}
}
数字谜:
ABCAB*A=DDDDDD
#include
int main()
{
int A, B, C, D;
long E, F;
for (A = 3 ; A <= 9 ; A++)
for (D = 1 ; D <= 9 ; D++)
{
E = D * 100000 + D * 10000 + D * 1000 + D * 100 + D * 10 + D;
if (E%A == 0 )
{
F = E / A;
if (F / 10000 == A && (F % 100 ) / 10 == A)
if ((F / 1000 ) % 10 == F % 10 )
printf( " %ld*%d=%ld\n " , F, A, E);
}
}
}
3 .分治法
分治法求解问题的过程是,将整个问题分成若干个小问题后分而治之。如果分解得到的子问题相对来说还太大,则可反复使用分治策略将这些子问题分成更小的同类型子问题,直至方便求解的子问题,必要时逐步合并这些子问题的解,从而得到问题的解。
下面是分治法求解的三个步骤:
1.分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题
2.解决:若子问题规模较小而容易被解决则直接解,否则再继续分解为更小的子问题,直到容易解决。
3.合并:将已求解的各子问题的解,逐步合并为原问题的解。
适合用分治法策略的问题:
1.能将n个数据分解成k个不同子集合,且得到k个子集合是可以独立求解的子问题。(1
2.分解得到的子问题与原问题具有相似的结构,便于利用递归或循环机制
3.在求出这些子问题的解之后,就可以推解出原问题的解。
下面给出残缺棋盘和金块问题的问题描述与具体算法,比较经典的分治法解决的问题还有大整数乘法问题,可以自己研究一下。
残缺棋盘
残缺棋盘是一个有2^k*2^k(k>=1)个方格的棋盘,其中恰有一个残缺。用k=1时各种可能的残缺棋盘(三格板)去覆盖更大的残缺棋盘,要求:1.三格板不能重叠2.三格板不能覆盖残缺方格,但必须覆盖其他所有的方格。
#include
int amount = 0 , Board[100 ][100 ];
void Cover(int tr, int tc, int dr, int dc, int size)
{
int s, t;
if (size < 2 ) return ;
amount = amount + 1 ;
t = amount;
s = size / 2 ;
if (dr < tr + s&&dc < tc + s)
{
Cover(tr, tc, dr, dc, s);
Board[tr + s - 1 ][tc + s] = t;
Board[tr + s][tc + s - 1 ] = t;
Board[tr + s][tc + s] = t;
Cover(tr, tc + s, tr + s - 1 , tc + s, s);
Cover(tr + s, tc, tr + s, tc + s - 1 , s);
Cover(tr + s, tc + s, tr + s, tc + s, s);
}
else if (dr= tc + s)
{
Cover(tr, tc + s, dr, dc, s);
Board[tr + s - 1 ][tc + s - 1 ] = t;
Board[tr + s][tc + s - 1 ] = t;
Board[tr + s][tc + s] = t;
Cover(tr, tc, tr + s - 1 , tc + s - 1 , s);
Cover(tr + s, tc, tr + s, tc + s - 1 , s);
Cover(tr + s, tc + s, tr + s, tc + s, s);
}
else if (dr >= tr + s&&dc s)
{
Cover(tr + s, tc, dr, dc, s);
Board[tr + s - 1 ][tc + s - 1 ] = t;
Board[tr + s - 1 ][tc + s] = t;
Board[tr + s][tc + s] = t;
Cover(tr, tc, tr + s - 1 , tc + s - 1 , s);
Cover(tr, tc + s, tr + s - 1 , tc + s, s);
Cover(tr + s, tc + s, tr + s, tc + s, s);
}
else if (dr >= tr + s&&dc>=tc + s)
{
Cover(tr + s, tc + s, dr, dc, s);
Board[tr + s - 1 ][tc + s - 1 ] = t;
Board[tr + s - 1 ][tc + s] = t;
Board[tr + s][tc + s - 1 ] = t;
Cover(tr, tc, tr + s - 1 , tc + s - 1 , s);
Cover(tr, tc + s, tr + s - 1 , tc + s, s);
Cover(tr + s, tc, tr + s, tc + s - 1 , s);
}
}
void OutputBoard(int size)
{
for (int i = 0 ; i < size; i++)
{
for (int j = 0 ; j )
{
printf(" %6d " , Board[i][j]);
}
printf( " \n " );
}
}
int main()
{
int size = 1 , x, y, i, j, k;
scanf( " %d " , &k);
for (i =1 ; i <= k; i++)
size = size * 2 ;
printf( " input incomplete pane\n " );
scanf( " %d %d " , &x, &y);
Cover( 0 , 0 , x, y, size);
OutputBoard(size);
return 0 ;
}
金块问题
老板有一袋金块(共n块,n是2的幂,n>=2),最优秀的雇员得到其中最重的一块,最差的雇员得到其中最轻的一块。用最少的比较次数找出最重和最轻的金块。
#include
#define N 8
float a[N] = {4.5 ,2.3 ,3.4 ,1.2 ,6.7 ,9.8 ,5 ,6 };
void maxmin(float &fmax, float &fmin, int i, int j)
{
int mid;
float lmax, lmin, rmax, rmin;
if (i == j)
{
fmax = a[i];
fmin = a[i];
}
else if (i==j-1 )
{
if (a[i] < a[j])
{
fmax = a[j];
fmin = a[i];
}
else
{
fmax = a[i];
fmin = a[j];
}
}
else
{
mid = (i + j) / 2 ;
maxmin(lmax, lmin,i, mid);
maxmin(rmax, rmin,mid + 1 , j);
if (lmax > rmax)
fmax = lmax;
else
fmax = rmax;
if (lmin > rmin)
fmin = rmin;
else
fmin = lmin;
}
}
int main()
{
float max, min;
maxmin(max, min, 0 , N - 1 );
printf( " Max=%.1f\nMin=%.1f\n " , max, min);
return 0 ;
}
4.贪心法
贪心法是逐步获得最优解,解决最优化问题时的一种简单但适用范围有限的策略。它没有固定的算法框架,算法设计的关键是贪婪策略的选择,选择的贪婪策略要具有无后向性。贪婪策略面对问题仅考虑当前局部信息便做出决策,也就是使用贪婪算法的前提是局部最优策略能导致产生全局最优解。
键盘输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原来左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小。
#include
int length(const char s[])
{
int i = 0 ;
if (s == NULL)
{
return 0 ;
}
while (s[i] != ' \0 ' )
{
++i;
}
return i;
}
void deleteNum(char * n, int b, int k)
{
int i;
for (i = b;i < length(n) - k;i++)
n[i] = n[i + k];
n[i] = ' \0 ' ;
}
int main()
{
char n[100 ];
int s, i, j, j1, c, data[100 ], len;
scanf( " %s " , n);
scanf( " %d " , &s);
len = length(n);
if (s > len)
{
printf( " data error " );
return 0 ;
}
j1 = 0 ;
for (i = 1 ;i <= s;i++)
{
for (j = 0 ; j < length(n); j++)
{
if (n[j] >n[j+1 ])
{
deleteNum(n, j, 1 );
if (j >= j1)
data[i] = j + i;
else
data[i] = data[i - 1 ] - 1 ;
j1 = j;
break ;
}
if (j > length(n))
break ;
}
}
for (i = i; i <=s; i++)
{
j = len - i + 1 ;
deleteNum(n, j, 1 );
data[i] = j;
}
while (n[0 ]==' 0 ' &&length(n)>1 )
{
deleteNum(n, 0 , 1 );
}
printf( " \n%s\n " , n);
for (i = 1 ; i <=s; i++)
{
printf( " %d " , data[i]);
}
printf( " \n " );
}
币种统计问题
某单位给每个职工发工资(精确到元)。为了保证避免临时兑换零钱,且取款的张数最少,发工资前要统计出所有职工的工资所需各种币值(100,50,20,10,5,2,1共7种)的张数。
#include
int main()
{
int i, j, n, GZ, A, B[8 ] = { 0 ,100 ,50 ,20 ,10 ,5 ,2 ,1 }, S[8 ] = { 0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 };
scanf( " %d " , &n);
for (i = 1 ; i <=n;i++)
{
scanf( " %d " , &GZ);
for (j = 1 ; j <=7 ; j++)
{
A = GZ / B[j];
S[j] = S[j] + A;
GZ = GZ - A*B[j];
}
}
for (i = 1 ; i <=7 ; i++)
{
printf( " %d----%d\n " , B[i], S[i]);
}
printf( " \n " );
}
埃及分数
设计一个算法,把一个真分数表示为埃及分数之和的形式。所谓埃及分数,是指分子为1的分数。如7/8=1/2+1/3+1/24
#include
int main()
{
int a, b, c,i=0 ;
printf( " input a element: " );
scanf( " %d " , &a);
printf( " input denominator: " );
scanf( " %d " , &b);
if (a >= b)
{
printf( " input error " );
}
else
{
if (a == 1 || b%a == 0 )
{
printf( " %d/%d=%d/%d\n " , a, b, 1 , b / a);
}
else
{
while (a!=1 )
{
c = b / a + 1 ;
a = a*c - b;
b = b*c;
printf( " 1/%d+ " , c);
if (b%a == 0 || a == 1 )
{
printf( " 1/%d " , b / a);
a = 1 ;
}
}
printf( " \n " );
}
}
}
5.动态规划
动态规划主要针对最优化问题,它的决策不是线性而是全面考虑各种不同的情况分别进行决策,最后通过多阶段的决策逐步找出问题的最终解。
适用条件:
最优化原理(最优子结构)
无后向性(某状态以后过程不会影响以前)
子问题重叠(子问题不独立,一个子问题在下一阶段决策时可能被多次使用到)
基本思想:
把求解的问题分成许多阶段或多个子问题,然后按顺序求解各子问题。
步骤:
划分阶段(划分为无后向性若干子阶段)
选择状态(罗列所出现状态,要满足无后效性)
确定决策并写出状态转移方程
0-1背包问题
给定N个物品和一个背包。物品i的重量是Wi ,其价值为Vi ,背包的容量为C。问应该如何选择装入背包的物品,使得装入背包的物品的总价值为最大?(在选择物品的时候,对每种物品i只有两种选择,即装入背包或不装入背包。不能将物品i装入多次,也不能只装入物品的一部分。因此,该问题被称为0-1背包问题。)
#include
int V[200 ][200 ];// 前i个物品装入容量为j的背包中获得的最大价值
int max(int a, int b)
{
if (a >= b) return a; else return b;
}
int KnapSack(int n, int w[], int v[], int x[], int C)
{
int i, j;
for (i = 0 ; i <= n; i++) V[i][0 ] = 0 ;
for (j = 0 ; j <= C; j++) V[0 ][j] = 0 ;
for (i = 0 ; i <= n - 1 ; i++)
for (j = 0 ; j <= C; j++)
if (j1][j];
else V[i][j] = max(V[i - 1 ][j], V[i - 1 ][j - w[i]] + v[i]);
j = C;
for (i = n - 1 ; i >= 0 ; i--)
{
if (V[i][j]>V[i - 1 ][j])
{
x[i] = 1 ; j = j - w[i];
}
else
x[i] = 0 ;
}
printf( " 选中的物品是:\n " );
for (i = 0 ; i < n; i++)
if (x[i])
printf( " %d " , i + 1 );
printf( " \n " );
return V[n - 1 ][C];
}
int main()
{
int n, i, v[200 ], w[200 ], x[200 ], c;
printf( " 请输入背包的容量: " );
scanf( " %d " , &c);
printf( " 请输入物品的个数: " );
scanf( " %d " , &n);
for (i = 0 ; i < n; i++)
{
scanf( " %d%d " , &v[i], &w[i]);
x[i] = 0 ;
}
KnapSack(n, w, v, x, c);
return 0 ;
}
转载于:https://www.cnblogs.com/czhwust/p/algorithm_and_ds2.html
你可能感兴趣的:(基础算法(二))
【面试经验】华为 AI软开 计算产品线(面经+时间线)
litterfinger
面试 华为 人工智能
一.岗位:AI软开二.时间线:投递08.09,机试08.28,测评08.29;面试均线上,一面09.12,二面09.27,三面09.29(本来是09.19线下二三面,但由于本人有事推迟)三.一面(50min)自我介绍简单介绍一下传统知识图谱建设和大模型对于知识的构建的差异和整体的趋势聊聊实习经历中的提示工程和sft具体的工作AI的一个发展历史流程和相关算法的引进知识图谱建设的总体流程回顾机试:老鼠
【CSS】background-position属性详解
Peter-Lu
# CSS css 前端 node.js html javascript
文章目录一、background-position属性概述1.属性介绍2.属性的取值3.属性的默认值二、background-position的基本用法1.使用关键字2.使用百分比3.使用像素值4.混合使用关键字与百分比/像素值三、background-position属性详解1.关键字定位2.百分比定位3.长度值定位四、background-position的实际应用场景1.背景图像居中显示2.
【第十节】windows sdk编程:截获控件消息
攻城狮7号
Windows编程(C++) windows windows编程 windows sdk c++
目录一、控件消息的截获概述二、相关函数三、示例代码四、高级技巧与注意事项五、常见问题解答六、总结一、控件消息的截获概述控件的消息处理函数通常由系统定义,开发者无需干预。但在需要实现特殊交互逻辑(如自定义点击效果、消息过滤或增强功能)时,可通过消息处理函数替换技术截获控件消息。此技术通过替换控件的默认消息处理函数(WindowProcedure),在自定义处理完成后,调用原函数确保消息链完整。该技术
React封装通用Form组件,类型转换、命名控件样式隔离、支持表单验证、位置自定义、自定义布局、提示信息info等功能。未采用二次封装调整灵活,包含使用文档
夜斗(dou)
react.js javascript ecmascript
封装通用组件一、封装思想二、react代码三、css代码四、实现效果五、使用文档BasicFormModal表格模态框组件组件简介功能特点使用方法基础用法宽度和位置控制使用初始值多种输入类型示例表单验证字段提示信息禁用字段自定义样式更新日志v1.0.0API说明PropsFormField配置项dataType数据类型选项Rule配置项Option配置项数据类型使用示例数值类型示例布尔类型示例注意
2025年机械工程、船舶与材料工程国际会议(ICMESME 2025)
投稿、参会咨询
理科 材料工程 机械工程 国际会议
2025InternationalConferenceonMechanicalEngineering,ShipandMaterialsEngineering一、大会信息会议简称:ICMESME2025大会地点:中国·桂林收录检索:提交EiCompendex,CPCI,CNKI,GoogleScholar等二、会议简介2025年机械工程、船舶与材料工程国际会议(简称ICMEMSE2025)即将在风景
信息收集之 子域名收集,子域名爆破_dnsdumpster
2401_89829398
网络
「作者主页」:士别三日wyx「作者简介」:CSDNtop100、阿里云博客专家、华为云享专家、网络安全领域优质创作者「专栏简介」:此文章已录入专栏《网络安全快速入门》子域名收集一、域名爆破原理二、搜索引擎收集子域名三、第三方网站收集子域名1.VirusTotal2.DNSdumpster四、工具收集子域名子域名就是下一级域名的意思,比如map.baidu.com和image.baidu.com就是
MVC/MVP/MVVM框架学习总结(二)
每次的天空
mvc 学习 java
上次已经了解到MVC的知识,现在是扩展实现MVP/MVVM的框架改进本身项目MVVM框架即Model-View-ViewModel框架,是一种软件架构设计模式,以下是具体介绍:核心组件Model(模型):代表应用程序的数据结构和业务逻辑,负责数据的存储、检索、验证和处理,定义业务规则和算法,是应用程序的数据核心。比如在一个电商应用中,商品数据、用户订单数据等的存储和相关逻辑处理都属于Model层。
【时间复杂度常见的计算】
xihongshi547
算法 leetcode 数据结构
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档时间复杂度的简单介绍前言一、时间复杂度是什么?二、时间复杂度的计算1.基本步骤2.常见的时间复杂度总结前言对于判断一段代码的好坏,取决于该代码运行的时间与占用的空间,也就是时间复杂度与空间复杂度,本章就先讲一下时间复杂度,主要包含常见的时间复杂度的计算。一、时间复杂度是什么?时间复杂度是衡量算法运行效率的一个重要指标,它表示随着输入规
网安工具系列:雷池waf社区版安装、配置使用
坦笑&&life
网络安全 安全 网络安全
雷池waf社区版安装以及相关问题解决一.雷池waf社区版安装什么是WAFWAF部署架构雷池waf的网站地址雷池的github地址官网是文档地址,中文文档,不会就去翻翻。waf的离线安装安装雷池配置需求可以逐行执行以下命令来确认服务器配置有三种安装方式供选择离线安装二.雷池waf社区版-配置使用(2)1防护站点-http域名的添加2防护站点-https域名证书的添加1证书的上传3测试防护效果参考官网
python的数据结构有哪些_Python的数据结构
weixin_39804059
python的数据结构有哪些
一、Python中有哪些数据结构?dict,list,tuple,set,str二、dict,list,tuple,set,str的特点dict:字典,由键值对构成,通过键值对字典中元素进行索引,是可变数据结构list:列表,列表中的元素可以是任意类型,通过下标进行索引,是可变数据结构tuple:元组,元组中的元素可以是任意类型,通过下标进行索引,其中的元素不可变str:字符串,通过下表索引,元素
微服务架构: SpringCloud实战经验总结
苹果酱0567
面试题汇总与解析 课程设计 spring boot vue.js java mysql
微服务架构:SpringCloud实战经验总结一、微服务架构简介什么是微服务架构微服务架构(MicroservicesArchitecture)是一种以业务功能组织的松散耦合、高内聚的服务架构。它将传统的单体应用拆分成一组小型服务,每个服务都可以独立开发、部署、扩展和替换。微服务架构通过服务之间的松耦合和互相隔离,使得开发团队能够更快速地迭代和交付应用,同时提高了整体系统的可扩展性和灵活性。二、S
(简单易懂口语化)对象的继承 - 2 成员变量 与 构造方法 的继承
奕口汤圆
Java学习 java 开发语言 考研 学习方法 改行学it 学习
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档成员变量与构造方法的继承规则内容概述一、成员变量的继承1,成员变量继承的本质2,访问的特点3,代码示例二、构造方法的继承1,构造方法的访问特点1.1父类的构造方法不会被子类继承。1.2子类中所有的构造方法默认先访问父类中的无参构造,再执行自己。1.3如何调用父类构造方法?总结内容概述(全文为Java描述)具体讲解成员变量与构造方法的继
P1328 [NOIP 2014 提高组] 生活大爆炸版石头剪刀布
让我上个超影吧
算法 算法
题目背景NOIP2014提高组D1T1题目描述石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第8集中出现了一种石头剪刀布的升级版游戏。升级版游戏在传统的石头剪刀布游戏的基础上,增加了两个新手势:斯波克:《星际迷航》主角之一。蜥蜴人:《星际迷航》中的反面角色。这五种手势的胜负关系如表一所示,表中列出的是甲对乙的游戏结果。现在,小A和
【数据结构】栈和队列
加油,旭杏
数据结构 java 开发语言
一、栈1.1栈的概念以及结构栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素的操作,进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出的原则。压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶出栈:栈的删除操作叫做出栈,出数据在栈顶1.2栈的实现栈的实现一般可以使用数组或者链表实现,相对而言数组的结构实现更加优一些,因为数组在尾上插入数据的代价比较小。二
java数组
TwitCoder
java 算法
目录一、数组概念二、数组的声明与初始化三、数组操作示例四、数组属性与注意事项五、内存结构分析六、常见操作七、二维数组八、稀疏数组一、数组概念数组是Java中用于存储相同类型数据的有序集合,具有以下特性:类型一致性:所有元素必须属于同一数据类型有序性:元素按顺序排列,通过索引访问长度固定:创建后无法改变容量二、数组的声明与初始化声明数组//推荐写法int[]numbers;初始化方式:动态初始化nu
算法学习之路——贪心算法
蒋楠鑫
算法 算法 贪心算法
文章目录一、前言二、什么是算法三、什么是贪心算法1.含义2.基本思路3.适用场景四、代码实现五、经典例题分析六、总结一、前言先来看一道简单的数学问题:小明有30元钱,每瓶酒要5元钱,每3个空瓶子可以换1瓶酒,请问小明最多可以喝到多少瓶酒?这道题目显然是一道求最优解的问题,由于数据量小我们可以用最简单最直接的枚举法来解决,但是如果将题目泛化一下呢:小明现在购买了m瓶酒,每n个空瓶子可以换1瓶酒,请问
python网格插值站点_在python中,在二维零网格上两点之间插值一条值线
weixin_39965490
python网格插值站点
TLDR:在2dnumpy数组中找到2个点后,如何在0数组中在它们之间插值一条1行?在上下文:目前我正在尝试从二值化的医学图像数据(0和1)对一个3d数组执行2d操作。最终目标是在填充体素/像素(即第一个和最后一个实例)的起点和终点之间添加一条1s的线。在为此,我使用SimpleITK分割一行,然后将其转换为numpy数组。在其他示例之后,我编写了返回一组数组的函数,这些数组显示填充(1)个像素和
python 网格数据插值_python – 网格数据的快速插值
weixin_39747399
python 网格数据插值
当然!有两个选项可以做不同的事情,但是既能利用原始数据的定期网格性质。第一个是scipy.ndimage.zoom.如果你只想通过内插原始数据生成一个更加密集的规则网格,那就是要走的路。第二个是scipy.ndimage.map_coordinates.如果你想在你的数据中插入一些(或许多)任意点,但仍然利用原始数据的定期网格性质(例如,不需要四叉树),那就是去的方式。作为一个快速示例(这将使用三
@Component—@Autowired—@Mapper—@Bean
追JAVA的小菜鸟
零碎知识点 bean java mybatis spring component
注解详解一、@Component二、@Autowired注解支持context:annotation-config——手动注入beancontext:component-scanbase-package="zy.pojo"——扫描包并自动注入总结三、@Mapper@Mapper与@Repository四、@Bean@Bean与@Component区别一、@Component作用:表明了此类为一个组
Spring Data JDBC 详解
m0_74823933
面试 学习路线 阿里巴巴 spring java 数据库
目录一、JPA背景?二、SpringBoot整合SpringdataJDBC??1.配置数据源?2.配置Druid的admin后台??3.Spring-data-jdbc常用接口查询策略1)?CrudRepository增删改查2)PagingAndSortingRepository分页排序一、JPA背景早期的JPA的特性是懒加载和关联查询,一下能查出所有的关联信息,但我们开发者在查询SQL的时候
SQLite?低调不是小众...
架构文摘JGWZ
sqlite 数据库 学习 后端
前几天在一个群里看到一位同学说:“SQLite这么小众的数据库,到底是什么人在用啊?”首先要说的是SQLite可不是小众的数据库,相反,SQLite是世界上装机量最多的数据库,远超MySQL,只不过比较低调而已。低调到我想在官网上找一个好看的用来当插图的图片都找不到,只能截一张官网首页来撑一撑,看起来十分朴素。我最早听说SQLite是刚毕业工作的时候,我们部门做微软内容管理产品的二次开发,其中有一
五大基础算法——模拟算法
六七_Shmily
数据结构与算法分析 算法
模拟算法是一种通过直接模拟问题描述的过程或规则来解决问题的算法思想。它通常用于解决那些问题描述清晰、步骤明确、可以直接按照规则逐步实现的问题。以下是模拟算法的核心概念、适用场景、实现方法及经典例题:一、核心概念问题描述清晰问题的规则和步骤明确,可以直接按照描述实现。逐步模拟按照问题的规则,一步一步模拟过程,直到得到最终结果。无复杂优化模拟算法通常不涉及复杂的优化技巧,重点是准确实现问题描述。二、适
C++闪电侠:快速幂算法终极指南
三流搬砖艺术家
算法 算法 深度优先 c++
目录快速幂核心思想快速幂模板代码快速幂取模模板(大数必备)实战演练(LeetCode真题)快速幂核心思想二进制分解+分治思想:a^13=a^(8+4+1)=a^8*a^4*a^1通过不断平方分解指数:a→a²→a⁴→a⁸→...动态演示:指数b=13的二进制:1101计算路径:a^1→(a^1)²→a^2→(a^2)²→a^4→(a^4)²→a^8最终结果=a^8*a^4*a^1快速幂模板代码ll
【11】单片机编程核心技巧:进制玄机
智木芯语
单片机 嵌入式硬件
【11】单片机编程核心技巧:进制玄机七律·进制玄机二进根基硬件生,八灯辉映万千形。字节八位藏寰宇,变量范围定始终。十六缩影通寄存,十进直观映真容。实验验证真理明,编程妙用万象成。摘要本文系统阐述了单片机编程中二进制、十六进制与十进制的转换方法及其应用。首先,从硬件基础出发,分析了二进制在数字电路中的核心地位,并结合变量位数与取值范围的实例,揭示了二进制在数据存储与运算中的重要性。其次,通过十六进制
windows安装es怎么在后台运行_Windows-ElasticSearch安装和启动
weixin_39531037
步骤二:安装ES服务Window版的ElasticSearch的安装很简单,类似Window版的Tomcat,解压开即安装完毕,解压后的ElasticSearch的目录结构如下:修改elasticsearch配置文件,config/elasticsearch.yml文件,增加文件内容如下:http.cors.enabled:truehttp.cors.allow-origin:"*"添加配置是为了
Hive SQL 精进系列:REGEXP_REPLACE 函数的用法
进一步有进一步的欢喜
Hive SQL 精进系列 hive sql hadoop
目录一、引言二、REGEXP_REPLACE函数基础2.1基本语法参数详解2.2简单示例三、REGEXP_REPLACE函数的应用场景3.1去除特殊字符3.2统一字符串格式四、REGEXP_REPLACE与REPLACE函数的对比4.1功能差异4.2适用场景五、REGEXP_REPLACE与REGEXP函数的对比5.1功能差异5.2适用场景六、总结一、引言字符串处理是数据处理中的常见需求,Hive
Hive SQL 精进系列:SUBSTR 函数的多样用法
进一步有进一步的欢喜
Hive SQL 精进系列 hive sql hadoop
目录一、引言二、SUBSTR函数基础介绍2.1基本语法2.2参数详解2.3简单示例三、SUBSTR函数常见应用场景3.1提取日期中的年份、月份或日期3.2隐藏部分敏感信息四、SUBSTR函数高级用法4.1结合条件判断动态截取4.2处理复杂字符串模式五、总结一、引言SUBSTR函数是HiveSQL中一个用于字符串截取的重要函数,在处理文本数据时发挥着关键作用。本文将全面且深入地介绍HiveSQL中S
【2025年春季】全国CTF夺旗赛-从零基础入门到竞赛,看这一篇就稳了!
白帽子凯哥
web安全 学习 安全 CTF夺旗赛 网络安全
基于入门网络安全/黑客打造的:黑客&网络安全入门&进阶学习资源包目录一、CTF简介二、CTF竞赛模式三、CTF各大题型简介四、CTF学习路线4.1、初期1、html+css+js(2-3天)2、apache+php(4-5天)3、mysql(2-3天)4、python(2-3天)5、burpsuite(1-2天)4.2、中期1、SQL注入(7-8天)2、文件上传(7-8天)3、其他漏洞(14-15
Docker 中 MySQL 迁移策略(单节点)
Java咩
docker mysql 容器
目录一、简介二、操作流程2.1进入mysql容器2.2导出MySQL数据2.3.将导出的文件复制到宿主机2.4创建DockerCompose配置2.5启动新的Docker容器2.6导入数据到新的容器2.7验证数据2.8删除旧的容器(删除操作需慎重)三、推荐配置四、写在后面一、简介本人发现自己Docker中Mysql的时区不对,导致每次连接数据库都需要设置时区,所以考虑进行数据库迁移,重新搭建一个正
精选一百道备赛蓝桥杯——3.分巧克力
六七_Shmily
精选一百道题备赛蓝桥杯 蓝桥杯 算法 职场和发展
二分法#includeusingnamespacestd;intn,k;inta[100005][2];boolcheck(intmid){intnum=0;for(inti=0;i=k)returntrue;}returnfalse;}intmain(){cin>>n>>k;for(inti=0;i>a[i][0]>>a[i][1];intl=0,r=100001;while(l+1!=r){i
对股票分析时要注意哪些主要因素?
会飞的奇葩猪
股票 分析 云掌股吧
众所周知,对散户投资者来说,股票技术分析是应战股市的核心武器,想学好股票的技术分析一定要知道哪些是重点学习的,其实非常简单,我们只要记住三个要素:成交量、价格趋势、振荡指标。
一、成交量
大盘的成交量状态。成交量大说明市场的获利机会较多,成交量小说明市场的获利机会较少。当沪市的成交量超过150亿时是强市市场状态,运用技术找综合买点较准;
【Scala十八】视图界定与上下文界定
bit1129
scala
Context Bound,上下文界定,是Scala为隐式参数引入的一种语法糖,使得隐式转换的编码更加简洁。
隐式参数
首先引入一个泛型函数max,用于取a和b的最大值
def max[T](a: T, b: T) = {
if (a > b) a else b
}
因为T是未知类型,只有运行时才会代入真正的类型,因此调用a >
C语言的分支——Object-C程序设计阅读有感
darkblue086
apple c 框架 cocoa
自从1972年贝尔实验室Dennis Ritchie开发了C语言,C语言已经有了很多版本和实现,从Borland到microsoft还是GNU、Apple都提供了不同时代的多种选择,我们知道C语言是基于Thompson开发的B语言的,Object-C是以SmallTalk-80为基础的。和C++不同的是,Object C并不是C的超集,因为有很多特性与C是不同的。
Object-C程序设计这本书
去除浏览器对表单值的记忆
周凡杨
html 记忆 autocomplete form 浏览
&n
java的树形通讯录
g21121
java
最近用到企业通讯录,虽然以前也开发过,但是用的是jsf,拼成的树形,及其笨重和难维护。后来就想到直接生成json格式字符串,页面上也好展现。
// 首先取出每个部门的联系人
for (int i = 0; i < depList.size(); i++) {
List<Contacts> list = getContactList(depList.get(i
Nginx安装部署
510888780
nginx linux
Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源
java servelet异步处理请求
墙头上一根草
java 异步返回 servlet
servlet3.0以后支持异步处理请求,具体是使用AsyncContext ,包装httpservletRequest以及httpservletResponse具有异步的功能,
final AsyncContext ac = request.startAsync(request, response);
ac.s
我的spring学习笔记8-Spring中Bean的实例化
aijuans
Spring 3
在Spring中要实例化一个Bean有几种方法:
1、最常用的(普通方法)
<bean id="myBean" class="www.6e6.org.MyBean" />
使用这样方法,按Spring就会使用Bean的默认构造方法,也就是把没有参数的构造方法来建立Bean实例。
(有构造方法的下个文细说)
2、还
为Mysql创建最优的索引
annan211
mysql 索引
索引对于良好的性能非常关键,尤其是当数据规模越来越大的时候,索引的对性能的影响越发重要。
索引经常会被误解甚至忽略,而且经常被糟糕的设计。
索引优化应该是对查询性能优化最有效的手段了,索引能够轻易将查询性能提高几个数量级,最优的索引会比
较好的索引性能要好2个数量级。
1 索引的类型
(1) B-Tree
不出意外,这里提到的索引都是指 B-
日期函数
百合不是茶
oracle sql 日期函数 查询
ORACLE日期时间函数大全
TO_DATE格式(以时间:2007-11-02 13:45:25为例)
Year:
yy two digits 两位年 显示值:07
yyy three digits 三位年 显示值:007
线程优先级
bijian1013
java thread 多线程 java多线程
多线程运行时需要定义线程运行的先后顺序。
线程优先级是用数字表示,数字越大线程优先级越高,取值在1到10,默认优先级为5。
实例:
package com.bijian.study;
/**
* 因为在代码段当中把线程B的优先级设置高于线程A,所以运行结果先执行线程B的run()方法后再执行线程A的run()方法
* 但在实际中,JAVA的优先级不准,强烈不建议用此方法来控制执
适配器模式和代理模式的区别
bijian1013
java 设计模式
一.简介 适配器模式:适配器模式(英语:adapter pattern)有时候也称包装样式或者包装。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类别自己的接口包裹在一个已存在的类中。 &nbs
【持久化框架MyBatis3三】MyBatis3 SQL映射配置文件
bit1129
Mybatis3
SQL映射配置文件一方面类似于Hibernate的映射配置文件,通过定义实体与关系表的列之间的对应关系。另一方面使用<select>,<insert>,<delete>,<update>元素定义增删改查的SQL语句,
这些元素包含三方面内容
1. 要执行的SQL语句
2. SQL语句的入参,比如查询条件
3. SQL语句的返回结果
oracle大数据表复制备份个人经验
bitcarter
oracle 大表备份 大表数据复制
前提:
数据库仓库A(就拿oracle11g为例)中有两个用户user1和user2,现在有user1中有表ldm_table1,且表ldm_table1有数据5千万以上,ldm_table1中的数据是从其他库B(数据源)中抽取过来的,前期业务理解不够或者需求有变,数据有变动需要重新从B中抽取数据到A库表ldm_table1中。
HTTP加速器varnish安装小记
ronin47
http varnish 加速
上午共享的那个varnish安装手册,个人看了下,有点不知所云,好吧~看来还是先安装玩玩!
苦逼公司服务器没法连外网,不能用什么wget或yum命令直接下载安装,每每看到别人博客贴出的在线安装代码时,总有一股羡慕嫉妒“恨”冒了出来。。。好吧,既然没法上外网,那只能麻烦点通过下载源码来编译安装了!
Varnish 3.0.4下载地址: http://repo.varnish-cache.org/
java-73-输入一个字符串,输出该字符串中对称的子字符串的最大长度
bylijinnan
java
public class LongestSymmtricalLength {
/*
* Q75题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
* 比如输入字符串“google”,由于该字符串里最长的对称子字符串是“goog”,因此输出4。
*/
public static void main(String[] args) {
Str
学习编程的一点感想
Cb123456
编程 感想 Gis
写点感想,总结一些,也顺便激励一些自己.现在就是复习阶段,也做做项目.
本专业是GIS专业,当初觉得本专业太水,靠这个会活不下去的,所以就报了培训班。学习的时候,进入状态很慢,而且当初进去的时候,已经上到Java高级阶段了,所以.....,呵呵,之后有点感觉了,不过,还是不好好写代码,还眼高手低的,有
[能源与安全]美国与中国
comsci
能源
现在有一个局面:地球上的石油只剩下N桶,这些油只够让中国和美国这两个国家中的一个顺利过渡到宇宙时代,但是如果这两个国家为争夺这些石油而发生战争,其结果是两个国家都无法平稳过渡到宇宙时代。。。。而且在战争中,剩下的石油也会被快速消耗在战争中,结果是两败俱伤。。。
在这个大
SEMI-JOIN执行计划突然变成HASH JOIN了 的原因分析
cwqcwqmax9
oracle
甲说:
A B两个表总数据量都很大,在百万以上。
idx1 idx2字段表示是索引字段
A B 两表上都有
col1字段表示普通字段
select xxx from A
where A.idx1 between mmm and nnn
and exists (select 1 from B where B.idx2 =
SpringMVC-ajax返回值乱码解决方案
dashuaifu
Ajax springMVC response 中文乱码
SpringMVC-ajax返回值乱码解决方案
一:(自己总结,测试过可行)
ajax返回如果含有中文汉字,则使用:(如下例:)
@RequestMapping(value="/xxx.do") public @ResponseBody void getPunishReasonB
Linux系统中查看日志的常用命令
dcj3sjt126com
OS
因为在日常的工作中,出问题的时候查看日志是每个管理员的习惯,作为初学者,为了以后的需要,我今天将下面这些查看命令共享给各位
cat
tail -f
日 志 文 件 说 明
/var/log/message 系统启动后的信息和错误日志,是Red Hat Linux中最常用的日志之一
/var/log/secure 与安全相关的日志信息
/var/log/maillog 与邮件相关的日志信
[应用结构]应用
dcj3sjt126com
PHP yii2
应用主体
应用主体是管理 Yii 应用系统整体结构和生命周期的对象。 每个Yii应用系统只能包含一个应用主体,应用主体在 入口脚本中创建并能通过表达式 \Yii::$app 全局范围内访问。
补充: 当我们说"一个应用",它可能是一个应用主体对象,也可能是一个应用系统,是根据上下文来决定[译:中文为避免歧义,Application翻译为应
assertThat用法
eksliang
JUnit assertThat
junit4.0 assertThat用法
一般匹配符1、assertThat( testedNumber, allOf( greaterThan(8), lessThan(16) ) );
注释: allOf匹配符表明如果接下来的所有条件必须都成立测试才通过,相当于“与”(&&)
2、assertThat( testedNumber, anyOf( g
android点滴2
gundumw100
应用服务器 android 网络应用 OS HTC
如何让Drawable绕着中心旋转?
Animation a = new RotateAnimation(0.0f, 360.0f,
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,0.5f);
a.setRepeatCount(-1);
a.setDuration(1000);
如何控制Andro
超简洁的CSS下拉菜单
ini
html Web 工作 html5 css
效果体验:http://hovertree.com/texiao/css/3.htmHTML文件:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>简洁的HTML+CSS下拉菜单-HoverTree</title>
kafka consumer防止数据丢失
kane_xie
kafka offset commit
kafka最初是被LinkedIn设计用来处理log的分布式消息系统,因此它的着眼点不在数据的安全性(log偶尔丢几条无所谓),换句话说kafka并不能完全保证数据不丢失。
尽管kafka官网声称能够保证at-least-once,但如果consumer进程数小于partition_num,这个结论不一定成立。
考虑这样一个case,partiton_num=2
@Repository、@Service、@Controller 和 @Component
mhtbbx
DAO spring bean prototype
@Repository、@Service、@Controller 和 @Component 将类标识为Bean
Spring 自 2.0 版本开始,陆续引入了一些注解用于简化 Spring 的开发。@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。具体只需将该注解标注在 DAO类上即可。同时,为了让 Spring 能够扫描类
java 多线程高并发读写控制 误区
qifeifei
java thread
先看一下下面的错误代码,对写加了synchronized控制,保证了写的安全,但是问题在哪里呢?
public class testTh7 {
private String data;
public String read(){
System.out.println(Thread.currentThread().getName() + "read data "
mongodb replica set(副本集)设置步骤
tcrct
java mongodb
网上已经有一大堆的设置步骤的了,根据我遇到的问题,整理一下,如下:
首先先去下载一个mongodb最新版,目前最新版应该是2.6
cd /usr/local/bin
wget http://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.6.0.tgz
tar -zxvf mongodb-linux-x86_64-2.6.0.t
rust学习笔记
wudixiaotie
学习笔记
1.rust里绑定变量是let,默认绑定了的变量是不可更改的,所以如果想让变量可变就要加上mut。
let x = 1; let mut y = 2;
2.match 相当于erlang中的case,但是case的每一项后都是分号,但是rust的match却是逗号。
3.match 的每一项最后都要加逗号,但是最后一项不加也不会报错,所有结尾加逗号的用法都是类似。
4.每个语句结尾都要加分