算法笔记
my_z_1234
想要努力变强的笨蛋莹,希望不会晚。
展开
-
【算法】八皇后问题(递归)
思路分析:第一个皇后先放第一行第一列第二个皇后放在第二行第一列,然后判断是否冲突,如果冲突,继续放在第二列、第三列……依次把所有列都放完,直到找到一个合适的继续第三个皇后,还是第一列、第二列……直到第八个皇后也能放在一个不冲突的位置,算是找到一个正确解当得到一个正确解时,在栈回退到上一个栈时,就会开始回溯,即将第一个皇后放在第一列,其他皇后放在其他列的所有正确解然后继续第一个皇后放第二列,后面继续循环执行1,2,3,4的步骤在这里可以使用一个一维数组保存值即可,第n个数字即代表第n个皇后。(原创 2020-08-11 17:06:06 · 141 阅读 · 0 评论 -
【算法】贪心算法-背包问题(可分割)
贪心算法介绍:贪心算法(贪婪算法)是指在对问题进行求解时,在每一步选择中都采取最好或最优(即最有利)的选择,从而希望能够导致结果是最好或者最优的算法。贪心算法所得到的结果不一定是最优的结果(有时候会是最优解),但是都是相对于近似(接近)最优解的结果。背包问题题目:背包容量为32,物品为下表,求放入背包的物品的总最大价值。物品ABCD价值502206060尺寸5201012比率101165本题按照比率降序尽可能多放入物品,先考虑原创 2020-08-05 15:27:51 · 683 阅读 · 0 评论 -
【算法】动态规划算法-01背包问题
思路分析:每次遍历到的第i个物品,根据 w[i] 和 v[j] 来确定是否需要将该物品放入背包中。即对于给定的 n 个物品,设 v[i]、w[i] 分别为第 i 个物品的价值和重量,C为背包的容量。再令 v[i][j] 表示在前 i 个物品中能够装入容量为 j 的背包中的最大价值。则有:v[i][0] = v[0][j] = 0;当 w[i]>j 时:v[i][j] = v[i-1][j]当 j>=w[i] 时:v[i][j] = max{v[i-1][j],v[i]+v[i-1][j原创 2020-08-04 15:18:02 · 266 阅读 · 0 评论 -
【算法】分治法
分治法,简而言之就是将原问题分为若干个小问题,解决之后再合并为原问题。思路分析-基本步骤:分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题合并:将各个子问题的解合并为原问题的解分治算法实现汉诺塔思路:如果只有一个盘,A -> C如果有 n>=2 情况,我们总是可以看做是两个盘 1、最下边的一个盘 2、上边的所有盘先把上面的盘 A -> B把最下边的盘 A -> C把B塔原创 2020-08-04 11:25:43 · 226 阅读 · 0 评论 -
【算法】二分查找法(非递归)
(查找的数组为有序数组,本文为升序数组)二分查找法的思路分析:首先确定该数组的中间的下标 mid=(left+right)/2 js代码下需要加上Math.floor(),否则会除法得出小数结果让需要查找的数 target 和 arr[mid] 比较target==arr[mid],说明找到,就返回target>arr[mid],说明要查找的数在 mid 的右边,因此需要向右查找 left=mid+1target<arr[mid],说明要查找的数在 mid 的左边,因此需要向左原创 2020-08-03 19:46:01 · 133 阅读 · 0 评论 -
【算法】二分查找法(递归)
(查找的数组为有序数组,本文为升序数组)二分查找法的思路分析:首先确定该数组的中间的下标 mid=(left+right)/2 js代码下需要加上Math.floor(),否则会除法得出小数结果让需要查找的数 target 和 arr[mid] 比较target>arr[mid],说明要查找的数在 mid 的右边,因此需要递归地向右查找target<arr[mid],说明要查找的数在 mid 的左边,因此需要递归地向左查找target==arr[mid],说明找到,就返回原创 2020-08-03 19:32:28 · 736 阅读 · 0 评论