当前位置: 首页 > 编程日记 > 正文

算法总结---最常用的五大算法(算法题思路)

一、贪心算法

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广泛的许多问题他能产生整体最优解或者是整体最优解的近似解。


用贪心法设计算法的特点是一步一步地进行,常以当前情况为基础根据某个优化测度作最优选择,而不考虑各种可能的整体情况,它省去了为找最优解要穷尽所有可能而必须耗费的大量时间,它采用自顶向下,以迭代的方法做出相继的贪心选择,每做一次贪心选择就将所求问题简化为一个规模更小的子问题,通过每一步贪心选择,可得到问题的一个最优解,虽然每一步上都要保证能获得局部最优解,但由此产生的全局解有时不一定是最优的,所以贪心法不需要回溯


注意:对于一个给定的问题,往往可能有好几种量度标准。初看起来,这些量度标准似乎都是可取的,但实际上,用其中的大多数量度标准作贪婪处理所得到该量度意义下的最优解并不是问题的最优解,而是次优解。因此,选择能产生问题最优解的最优量度标准是使用贪婪算法的核心

经典的求最小生成树的Prim算法Kruskal算法、计算强连通子图的Dijkstra算法、构造huffman树的算法都是漂亮的贪心算法

基本思路:

⒈建立数学模型来描述问题。
⒉把求解的问题分成若干个子问题。
⒊对每一子问题求解,得到子问题的局部最优解。
⒋把子问题的解局部最优解合成原来解问题的一个解。
实现该算法的过程:
从问题的某一初始解出发;
while 能朝给定总目标前进一步 do
求出可行解的一个解元素;
由所有解元素组合成问题的一个可行解。

例子:

马踏棋盘的贪心算法
【问题描述】
马的遍历问题。在8×8方格的棋盘上,从任意指定方格出发,为马寻找一条走遍棋盘每一格并且只经过一次的一条最短路径。
【贪心算法】
其实马踏棋盘的问题很早就有人提出,且早在1823年,J.C.Warnsdorff就提出了一个有名的算法。在每个结点对其子结点进行选取时,优先选择‘出口’最小的进行搜索,‘出口’的意思是在这些子结点中它们的可行子结点的个数,也就是‘孙子’结点越少的越优先跳,为什么要这样选取,这是一种局部调整最优的做法,如果优先选择出口多的子结点,那出口少的子结点就会越来越多,很可能出现‘死’结点(顾名思义就是没有出口又没有跳过的结点),这样对下面的搜索纯粹是徒劳,这样会浪费很多无用的时间,反过来如果每次都优先选择出口少的结点跳,那出口少的结点就会越来越少,这样跳成功的机会就更大一些。

二、分治算法

思想:

分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。

分治法应用场景:

运用分治策略解决的问题一般来说具有以下特点:
1、原问题可以分解为多个子问题
这些子问题与原问题相比,只是问题的规模有所降低,其结构和求解方法与原问题相同或相似。
2、原问题在分解过程中,递归地求解子问题
由于递归都必须有一个终止条件,因此,当分解后的子问题规模足够小时,应能够直接求解
3、在求解并得到各个子问题的解后
应能够采用某种方式、方法合并或构造出原问题的解。
不难发现,在分治策略中,由于子问题与原问题在结构和解法上的相似性,用分治方法解决的问题,大都采用了递归的形式。在各种排序方法中,如归并排序、堆排序、快速排序等,都存在有分治的思想。

分治法解题的一般步骤:

(1)分解,将要解决的问题划分成若干规模较小的同类问题;
(2)求解,当子问题划分得足够小时,用较简单的方法解决;
(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

三、动态规划

基本思想:

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式

与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)

应用场景:

适用动态规划的问题必须满足最优化原理、无后效性和重叠性
1.最优化原理(最优子结构性质) 最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。

2.无后效性 将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。

3.子问题的重叠性 动态规划将原来具有指数级时间复杂度的搜索算法改进成了具有多项式时间复杂度的算法。其中的关键在于解决冗余,这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。

全路径最短路径的Floyd算法就是漂亮地运用了动态规划思想。

下面是我找到的一个关于 0-1背包问题 的动态规划思想PPT截图:

问题描述:
给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大?

对于一种物品,要么装入背包,要么不装。所以对于一种物品的装入状态可以取0和1.我们设物品i的装入状态为xi,xi∈ (0,1),此问题称为0-11背包问题。

数据:物品个数n=5,物品重量w[n]={0,2,2,6,5,4},物品价值V[n]={0,6,3,5,4,6},
(第0位,置为0,不参与计算,只是便于与后面的下标进行统一,无特别用处,也可不这么处理。)总重量c=10。背包的最大容量为10,那么在设置数组m大小时,可以设行列值为6和11,那么,对于m(i,j)就表示可选物品为i…n背包容量为j(总重量)时背包中所放物品的最大价值。


四、回溯法

回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

基本思想:

回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含(剪枝过程),则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。

回溯法就是对隐式图的深度优先搜索算法

回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死(剪枝)那些实际上不可能产生所需解的活结点,以减少问题的计算量。具有限界函数的深度优先生成法称为回溯法。(回溯法 = 穷举 + 剪枝)

一般步骤:

(1)针对所给问题,定义问题的解空间;
(2)确定易于搜索的解空间结构;
(3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

两个常用的剪枝函数:

(1)约束函数:在扩展结点处减去不满足约束的子数
(2)限界函数:减去得不到最优解的子树


  用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。而显式地存储整个解空间则需要O(2^h(n))或O(h(n)!)内存空间。


五、分支限界法

基本思想:

分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。

分支限界法与回溯法的区别:

(1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。
(2)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。

常见的两种分支限界法:

(1)队列式(FIFO)分支限界法
按照队列先进先出(FIFO)原则选取下一个节点为扩展节点。
(2)优先队列式分支限界法
按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。

例子:单源最短路径问题(参考http://www.cnblogs.com/chinazhangjie/archive/2010/11/01/1866136.html)

1、问题描述
在下图所给的有向图G中,每一边都有一个非负边权。要求图G的从源顶点s到目标顶点t之间的最短路径。

下图是用优先队列式分支限界法解有向图G的单源最短路径问题产生的解空间树。其中,每一个结点旁边的数字表示该结点所对应的当前路长。

找到一条路径:

目前的最短路径是8,一旦发现某个结点的下界不小于这个最短路进,则剪枝:

同一个结点选择最短的到达路径:

2.剪枝策略
在算法扩展结点的过程中,一旦发现一个结点的下界不小于当前找到的最短路长,则算法剪去以该结点为根的子树。
在算法中,利用结点间的控制关系进行剪枝。从源顶点s出发,2条不同路径到达图G的同一顶点。由于两条路径的路长不同,因此可以将路长长的路径所对应的树中的结点为根的子树剪去。
3.算法思想
解单源最短路径问题的优先队列式分支限界法用一极小堆来存储活结点表。其优先级是结点所对应的当前路长。
算法从图G的源顶点s和空优先队列开始。结点s被扩展后,它的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。如果从当前扩展结点i到顶点j有边可达,且从源出发,途经顶点i再到顶点j的所相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。这个结点的扩展过程一直继续到活结点优先队列为空时为止。

源码如下:

[cpp] view plaincopyprint?
  1. /* 主题:单源最短路径问题
  2. * 作者:chinazhangjie
  3. * 邮箱:chinajiezhang@gmail.com
  4. * 开发语言:C++
  5. * 开发环境:Mircosoft Virsual Studio 2008
  6. * 时间: 2010.11.01
  7. */
  8. #include <iostream>
  9. #include <vector>
  10. #include <queue>
  11. #include <limits>
  12. usingnamespace std;
  13. struct node_info
  14. {
  15. public:
  16. node_info (int i,int w)
  17. : index (i), weight (w) {}
  18. node_info ()
  19. : index(0),weight(0) {}
  20. node_info (const node_info & ni)
  21. : index (ni.index), weight (ni.weight) {}
  22. friend
  23. bool operator < (const node_info& lth,const node_info& rth) {
  24. return lth.weight > rth.weight ; // 为了实现从小到大的顺序
  25. }
  26. public:
  27. int index; // 结点位置
  28. int weight; // 权值
  29. };
  30. struct path_info
  31. {
  32. public:
  33. path_info ()
  34. : front_index(0), weight (numeric_limits<int>::max()) {}
  35. public:
  36. int front_index;
  37. int weight;
  38. };
  39. // single source shortest paths
  40. class ss_shortest_paths
  41. {
  42. public:
  43. ss_shortest_paths (const vector<vector<int> >& g,int end_location)
  44. :no_edge (-1), end_node (end_location), node_count (g.size()) , graph (g)
  45. {}
  46. // 打印最短路径
  47. void print_spaths () const {
  48. cout << "min weight : " << shortest_path << endl;
  49. cout << "path: " ;
  50. copy (s_path_index.rbegin(),s_path_index.rend(),
  51. ostream_iterator<int> (cout, " "));
  52. cout << endl;
  53. }
  54. // 求最短路径
  55. void shortest_paths () {
  56. vector<path_info> path(node_count);
  57. priority_queue<node_info,vector<node_info> > min_heap;
  58. min_heap.push (node_info(0,0)); // 将起始结点入队
  59. while (true) {
  60. node_info top = min_heap.top (); // 取出最大值
  61. min_heap.pop ();
  62. // 已到达目的结点
  63. if (top.index == end_node) {
  64. break ;
  65. }
  66. // 未到达则遍历
  67. for (int i = 0; i < node_count; ++ i) {
  68. // 顶点top.index和i间有边,且此路径长小于原先从原点到i的路径长
  69. if (graph[top.index][i] != no_edge &&
  70. (top.weight + graph[top.index][i]) < path[i].weight) {
  71. min_heap.push (node_info (i,top.weight + graph[top.index][i]));
  72. path[i].front_index = top.index;
  73. path[i].weight = top.weight + graph[top.index][i];
  74. }
  75. }
  76. if (min_heap.empty()) {
  77. break ;
  78. }
  79. }
  80. shortest_path = path[end_node].weight;
  81. int index = end_node;
  82. s_path_index.push_back(index) ;
  83. while (true) {
  84. index = path[index].front_index ;
  85. s_path_index.push_back(index);
  86. if (index == 0) {
  87. break;
  88. }
  89. }
  90. }
  91. private:
  92. vector<vector<int> > graph ; // 图的数组表示
  93. int node_count; // 结点个数
  94. constint no_edge; // 无通路
  95. constint end_node; // 目的结点
  96. vector<int> s_path_index; // 最短路径
  97. int shortest_path; // 最短路径
  98. };
  99. int main()
  100. {
  101. constint size = 11;
  102. vector<vector<int> > graph (size);
  103. for (int i = 0;i < size; ++ i) {
  104. graph[i].resize (size);
  105. }
  106. for (int i = 0;i < size; ++ i) {
  107. for (int j = 0;j < size; ++ j) {
  108. graph[i][j] = -1;
  109. }
  110. }
  111. graph[0][1] = 2;
  112. graph[0][2] = 3;
  113. graph[0][3] = 4;
  114. graph[1][2] = 3;
  115. graph[1][5] = 2;
  116. graph[1][4] = 7;
  117. graph[2][5] = 9;
  118. graph[2][6] = 2;
  119. graph[3][6] = 2;
  120. graph[4][7] = 3;
  121. graph[4][8] = 3;
  122. graph[5][6] = 1;
  123. graph[5][8] = 3;
  124. graph[6][9] = 1;
  125. graph[6][8] = 5;
  126. graph[7][10] = 3;
  127. graph[8][10] = 2;
  128. graph[9][8] = 2;
  129. graph[9][10] = 2;
  130. ss_shortest_paths ssp (graph, 10);
  131. ssp.shortest_paths ();
  132. ssp.print_spaths ();
  133. return 0;
  134. }

测试数据(图)

测试结果:

min weight :8
path:
0 2 6 9 10


相关文章:

软切换中的测量

软切换中的测量 同频测量&#xff1a; CPICH RSCP、Ec/N0, 事件触发报告&#xff0c;1A,...,1F 1A&#xff0c;相对门限增加事件&#xff0c;表示一个小区的质量已经接近最好小区或者活动集质量 1B&#xff0c;相对门限删除事件&#xff0c;表示一个小区…

测试与封装5.1.5.2

1.第一阶段目标 - 把计算的功能封装成类。2.设计测试用例&#xff1a;用白盒与黑盒测试设计技术&#xff0c;为计算核心设计测试用例。3.在实验环境中&#xff08;如MyEclipse集成开发环境Junit测试框架&#xff09;运行测试用例&#xff0c;分析测试结果&#xff0c;找出程序问…

Java项目:企业员工绩效工资管理系统(java+SpringBoot+FreeMarker+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 超级管理员等角色&#xff0c;除基础脚手架外&#xff0c;实现的功能有&#xff1a; 超级管理员&#xff1a;系统管理、用户管理&#xff08;冻结等&#xff09;、职称管理、部门管理&#xff08;工资项&am…

Sql server 阻塞定位

很多人都遇到过这样的情况&#xff0c;当网站达到一定的访问量&#xff0c;数据库就会成为瓶颈&#xff0c;进而引起阻塞。有人认为这可能就是硬件的极限了&#xff0c;于是想办法增加硬件设备。而我本人认为问题的元凶可能是性能不高的sql脚本&#xff0c;引起了阻塞。如果你和…

基于EasyNVR摄像机网页无插件直播服务二次开发实现H5播放页面的简单集成方案...

我们通常在构架一套视频SaaS应用的过程中&#xff0c;将平台设计为3层&#xff1a;视频硬件层&#xff08;视频源&#xff09;、视频能力平台&#xff08;vPaaS&#xff09;、视频应用平台&#xff08;vSaaS&#xff09;&#xff0c;视频硬件包括各种IPC、NVR、编码器等视频生成…

active set + serving cell

空闲态&#xff1a;这时候手机只能使用一路信号&#xff0c;应该是最强的那一路。手机在空闲态时不断地搜索各个导频的强度&#xff0c;如果搜到比当前使用的导频更强的&#xff0c;那么它就自发的进行切换。这个切换的过程是手机自发的过程&#xff0c;不需要基站的参与。业务…

Java项目:医院分诊挂号住院管理系统(java+SpringBoot+FreeMarker+Mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 主要实现了从挂号预约到分诊住院出诊等一些列医院基本操作流程的全部功能&#xff0c;系统分医生、患者、管理员三个角色&#xff0c;除基础脚手架外&#xff0c;实现的功能有&#xff1a; 管理员&#xff…

网站压力测试工具webbench

webbench最多可以模拟3万个并发连接去测试网站的负载能力&#xff0c;个人感觉要比Apache自带的ab压力测试工具好&#xff0c;安装使用也特别方便。  1、适用系统&#xff1a;Linux  2、编译安装&#xff1a; 引用wget http://blog.zyan.cc/soft/linux/webbench/webbench-1…

运维人员处理云服务器故障的方法总结

2019独角兽企业重金招聘Python工程师标准>>> 我们团队为Ucloud云计算服务提供专家技术支持,每天都要碰到无数的用户故障,毕竟IAAS涉及比较底层的东西,不管设计的是大客户也好还是小客户,有了问题就必须要解决,也要要是再赶上修复时间紧、奇葩的技术平台、缺少信息和…

玉米田Corn Fields

传送门 #include <cstdio> #include <cmath> #include <cstring> #include <algorithm> using namespace std; #define ll long long #define re register const int mod1e8; void read(int &a) {a0;int d1;char ch;while(chgetchar(),ch>9||ch…

Java项目:酒店管理系统(java+Springboot+Mybatis+Beetl+Layui)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 此系统用的是springboot框架&#xff0c;前端框架主要用的是layui&#xff0c;表格用的bootstrap 表格&#xff0c;都是一些主流的框架&#xff0c;前端模板引擎用的是beetl&#xff0c;操作简单&#xff0c…

word导入中的一个乱码

2019独角兽企业重金招聘Python工程师标准>>> 在做一个题库的项目中,需要将word中的试题导入到数据库中,中间过程真是坎坷,且不说word中的公式,图片等等格式,还有凌乱的排版,还有一些不明觉厉的乱码; 由于PHP暂时不能胜任,所以使用了C#开发了一个客户端来导入,时间很…

Eclipse中git检出、更新、提交、合并分支、以及解决冲突

一、、检出git代码 在eclipse中空白区域右键 Import 检出项目&#xff1b;选择git方式检出 选择用git urI 链接的方式检出项目并点击继续 在这里填写你的git项目地址、账号密码 二、更新 1、先更新 "远程服务器 --> 本地服务器"&#xff0c;再进行 更新 " 本…

Cell select

WCDMA系统的小区重选采用R准则&#xff0c;适用于同频、异频和异系统的小区重选。UE在空闲模式下&#xff0c;要随时监测当前小区和邻区的信号质量&#xff0c;以选择一个最好的小区提供服务&#xff0c;这就是小区重选过程&#xff08;cell reselection&#xff09;。而切换是…

Java项目:茶叶售卖商城系统(java+SSM+JSP+EasyUi+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 这是一个应用SSM框架的项目&#xff0c;前端页面整洁清晰。该系统有两个角色&#xff0c;一个是普通用户&#xff0c;另一个是管理员。 普通用户具有注册、登录、查看商品、添加购物车、添加商品收藏、下订…

SOAP消息的传递

上一篇说了SOAP消息的创建&#xff0c;那么创建好了的SOAP消息要怎么发送给服务端呢&#xff1f; public class SoapTest {private String wsdlUri "http://localhost:9999/ns?wsdl";private String ns "http://lenve.server/";Testpublic void test3()…

mfc---手动给toolbar按钮添加消息View中

手动给toolbar按钮添加消息View中&#xff1a; .h&#xff1a; afx_msg void OnButtonBG(); .cpp: ON_COMMAND(ID_BUTTON_BG,OnButtonBG) .cpp: void OnButton()转载于:https://www.cnblogs.com/xiaoxiaocaicai/p/3595290.html

费马小定理求素数

/*---------------------------------------------------费马小定理:如果n是一个素数&#xff0c;a是小于n的任意正整数&#xff0c;那么a的n次方与a模n同余。(俩个数称为模n同余&#xff0c;如果它们除以n的余数相同。数a除以n的余数称为a取模n的余数&#xff0c;或简称为a取模…

Java项目:垃圾分类查询管理系统(java+SSM+jsp+MySQL+bootstrap)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; jspssm&#xff08;springspringmvcmybatis&#xff09;mysql实现的垃圾分类查询管理系统: 系统主要实现的功能有&#xff1a; 1&#xff1a;前端垃圾分类查询&#xff0c;前端采用bootstrap框架&#xff…

适合所有尺寸打印马赛克

CGFloat width 40;CGFloat height 40;//获取屏幕宽高//获取屏幕对象UIScreen *screen [UIScreen mainScreen];//获取屏幕大小CGRect screenFrame [screen bounds];//单独取出屏幕的宽高 // CGFloat screenWidth screenFrame.size.width;CGFloat screenWidth CGRectGet…

MVC使用Flash来显示图片

Insus.NET实现一些网站模版&#xff0c;如用户能动态变更网站的头&#xff0c;中间或是脚的部位&#xff0c;就是不太确定用户上传的是图片&#xff0c;还是Flash。因此想到一个较好的解决方法&#xff0c;就是使用Flash的组件去显示来源的图片或是.swf文件。这样的话&#xff…

shuffle调优

目录 一、概述二、shuffle的定义三、ShuffleMananger发展概述四、HashShuffleManager的运行原理 4.1 未经优化的HashShuffleManager4.2 优化后的HashShuffleManager五、SortShuffleManager运行原理 5.1 普通运行机制5.2 bypass运行机制六、shuffle相关参数调优 spark.shuffle.f…

Java8 以后的 LocalDateTime,你真的会用吗?

本文从 LocalDateTime 类的创建、转换、格式化与解析、计算与比较以及其他操作几个方面详细介绍了 LocalDateTime 类在 Java 8 中的使用。掌握 LocalDateTime 类的使用可以大大提高日期时间处理效率和质量,希望本文对读者有所帮助。

斐波那契算法举例(iterative Fibonacci algorithm)

// count_change.cpp : Defines the entry point for the console application.// #include "stdafx.h" /*-------------------------------------------------------------实例&#xff1a;要想得到一个迭代的斐波那契算法需要一点点智慧。给了半美元、四分之一美…

Java项目:零食商城系统(java+SSM+jsp+MySQL+EasyUI)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 系统主要实现的功能有&#xff1a;用户浏览商品、加入商品到购物车、登录注册、提交订单&#xff0c;会员中心修改个人信息、查看订单等。 后台管理员登录后可以分角色添加管理员&#xff0c;不同角色有不同…

skiplist 跳表(1)

最近学习中遇到一种新的数据结构&#xff0c;很实用&#xff0c;搬过来学习。 原文地址&#xff1a;skiplist 跳表 为什么选择跳表 目前经常使用的平衡数据结构有&#xff1a;B树&#xff0c;红黑树&#xff0c;AVL树&#xff0c;Splay Tree, Treep等。 想象一下&#xff0c;给…

前端学习笔记系列一:14 vue3.X中alias的配置

第一步&#xff1a; 第二步&#xff1a; // vue.config.js module.exports { configureWebpack: { resolve: { alias: { assets: /assets, components: /components, views: /views, } } }, } 并且&#xff0c;在没有自行配置alias的时候&#xff0c;就已经可以使用inquire(‘…

【转】sed 简明教程

本文转自&#xff1a;http://coolshell.cn/articles/9104.html awk于1977年出生&#xff0c;今年36岁本命年&#xff0c;sed比awk大2-3岁&#xff0c;awk就像林妹妹&#xff0c;sed就是宝玉哥哥了。所以 林妹妹跳了个Topless&#xff0c;他的哥哥sed坐不住了&#xff0c;也一定…

帕斯卡三角形(Pascal's triangle)

// The following code is compiled on VC2005 // #include "stdafx.h" /*-----------------------------------------------下面数值模式称为帕斯卡三角形(Pascals triangle)11 11 2 11 3 3 11 4 6 4 1 ...三角形边界上的数都是1&#xff0c;内部的每个数数是位…

Java项目:高校学生社团活动管理系统(java+springboot+freemark+jpa+mysql)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 前台&#xff1a; 1、社团信息浏览搜索、社团活动风采、新闻信息浏览搜索。 2、学生注册登录。 3、登录后可自己申请创建社团&#xff0c;也可申请加入其他社团活动。 4、管理自己社团的申请人员。 5个…