
算法
算法的道与术
即刻实现工作室
Above all, don't lose hope.
展开
-
划分数问题(放苹果问题)
划分数问题问题描述一:有n个无区别的物品,将它们划分成不超过m组,求出划分方法数问题描述二:把n个同样的苹果放在m个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?归根结底是同一种问题,不同的描述。分析:设dp[n] [m]表示将n个苹果放入m个盘子中的方法数,那么:如果 m>n 那么将n个苹果放入m个盘子中的放法数等于将n个苹果放入n个盘子中的放法数(苹果、盘子都是无状态的),因此有:dp[n] [m]=dp[n] [n] (m>n)如果m<=n 那么原创 2020-09-16 21:04:16 · 547 阅读 · 0 评论 -
多重部分和问题
多重部分和问题问题描述:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kttCIHJu-1599816472778)(C:\Users\mafuxiao\AppData\Roaming\Typora\typora-user-images\image-20200911163510915.png)]问题分析:假设数组中存在n个数字,要能够从这n个数字中拿出一部分数使得和为k,那么需要满足的是能够从n-1个数字中拿出一部分数使得和为k-m*a[n-1] (0<=m&原创 2020-09-11 17:29:16 · 293 阅读 · 0 评论 -
贪心策略解决木板截取最小开销问题------类哈夫曼编码问题
贪心策略解决木板截取最小开销问题------类哈夫曼编码问题一、贪心法:遵循某种规则,不断贪心的选择当前最优策略的算法设计方法。常见问题有:最少硬币问题、区间问题、字典序最小问题、点覆盖问题、木板截取问题等。二、木板截取问题三、算法分析与设计由于已经给出了截取后得到的每块木板的长度,要让总开销最小,那么我们按照贪心的思想让每次截取开销最小即可,因此我每次选择最小的两截木板作为被截开木板,因此我们不难发现这其实是一个变形的哈夫曼编码问题。 /// <summary>原创 2020-09-07 11:07:41 · 689 阅读 · 0 评论 -
深度优先搜索----解决有效路径查找问题
深度优先搜索----解决有效路径查找问题一、问题地址:点击二、算法分析与实现概要分析 题目要求是从左上角的网格开始找出一条能够到右下角网格的可达的路径,可以看出是明显的搜索问题,由于是找到一条可达的路径即可,因此采用DFS即可实现。详细分析 由于不同类型的网格出入口不同,因此在搜索时不能单纯的上下左右位移,需要考虑当前网格的出口和下一网格的入口是否能够对接,因此我们需要存储不同网格的出入口和能够与之对接的网格类型。因此设置如下存储结构:_out <int原创 2020-09-07 11:06:10 · 1369 阅读 · 0 评论 -
深度搜索----深度搜索解决数独问题
深度搜索----深度搜索解决数独问题1.深度优先搜索(DFS)从某个状态开始,不断的转移状态直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。2.数独问题给定数列a,判断是否可以从中选出若干个数,使他们的和恰好为k。输入:n=4a={1,2,4,7}k=13输出:Yes3.数独问题分析与实现由于数列中每个数存在加或者不加两种状态,那么可绘制二叉状态树如下:算法实现:public class AlgorithmCenter200713原创 2020-09-07 11:02:55 · 1599 阅读 · 0 评论 -
深度搜索—-深度搜索解决矩阵搜索问题(水洼数计算)
深度搜索—-深度搜索解决矩阵搜索问题(水洼数计算)一、题目有一个大小为N*M的园子,雨后积起了水。八连通的计税被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通指的是下图中相对w的*的部分)二、输入与输出输入园子的积水矩阵图,w表示积水,.表示没有积水输出水洼个数,为3如图三个水洼为红色圈起的部分:三、算法分析与实现实现思路:首先需要明白构成同一个水洼的条件,即如果能够成同一个水洼,那么该区域中的所有积水点是连通的(八连通),因此为了寻找园子中的积水连通区域,我们需要在整个园原创 2020-09-07 11:00:56 · 617 阅读 · 0 评论 -
宽度优先搜索-----解决迷宫最短路径问题
宽度优先搜索-----解决迷宫最短路径问题一、关于宽度优先搜索的知识1.深度优先搜索利用栈进行计算,因此一般场景中采用递归的方式实现。2.宽度优先搜索则利用队列进行计算,搜索时首先将初始状态添加到队列里,此后从队列的最前端不断取出状态,把从该状态可以转移到的状态中尚未访问过的部分加入队列,如此往复,直至队列被取空或者找到问题的解。3.宽度优先搜索按照距开始状态由近及远的顺序搜索,因此可以很容易的用来求最短路径、最少操作之类问题的答案。二、迷宫最短路径问题 输出:22三、算法分析原创 2020-09-07 10:58:49 · 2302 阅读 · 0 评论 -
快排思想找出第K大的数
题目描述有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。测试样例:[1,3,5,2,2],5,3返回:2import java.util.*;public class Finder { public int findKth(int[] a, int n, int K) { return help(0,n-1,a,K); } priva原创 2020-09-07 10:56:55 · 813 阅读 · 1 评论 -
基于LRU算法引擎的简单缓存机制
基于LRU算法引擎的简单缓存机制一、缓存淘汰策略: 当缓存容量不足时,将最近最少使用到的缓存直接淘汰掉。二、实现数据结构 双向链表+字典三、实现大体思路 先上核心代码吧 ` /// <summary> /// 基于LRU算法的缓存机制 /// 实现数据结构:双向链表+字典 /// </summary> public class CacheLRUEngine<K,V> {原创 2020-09-07 10:54:42 · 233 阅读 · 0 评论 -
动态规划
动态规划动态规划法是一种常用的系统分析方法,用来求解多阶段决策问题的最优解。它适用于具有明显阶段性的问题,其基本思想是:根据时间和空间特点,将规模较大的复杂问题划分为规模较小、较为简单的相互联系的若干个子问题(阶段),按顺序求解各个子问题,对每个子问题都根据其当前状态作出决策(即求出解),前一子问题的解作为下一子问题的初始状态。依次解决各个子问题,最后一个子问题的解就是原始问题的解。在对每一子问题求解时,根据前一子问题所提供给的初始状态,按问题要求列出各种可能的解,通过决策选择出最优解。在一个多阶段决策原创 2020-09-07 10:53:00 · 312 阅读 · 0 评论 -
算法期末复习笔记
第一章算法引论1.算法时间复杂度 第二章 递归与分治策略一.算法设计思想分治法的设计思想是,将一个难以直接解决的大问题,分隔成一些规模较小的相同问题,以便各个击破。二.整数划分问题...原创 2018-12-30 17:08:45 · 9993 阅读 · 1 评论 -
快速排序
最近手写了一下快速排序,现将自己的理解和在调试程序过程中遇到的一些问题总结一下以供参考(新手入学,高手勿喷)先上代码: import java.io.*;import java.util.Scanner;public class QuickSort { int temp;//temp为基数值 int i;//左边哨兵 int j;//右边哨兵 int[]save; Qu...原创 2017-10-15 09:49:10 · 272 阅读 · 2 评论