摘要:前言 在上一篇文章动态规划的文章中,我们先由 Fibonacci 例子引入到了动态规划中,然后借助兑换零钱的例子,分析了动态规划最主要的三个性质,即: 重叠子问题 最优子结构 状态转移方程 但是动态规划远不止这么简单。 今天这篇文章,让我们深入动态规划,一窥动态规划的本质。 我们既然要彻底搞清楚动态
阅读全文
随笔分类 - 算法
摘要:前言 在上一篇文章动态规划的文章中,我们先由 Fibonacci 例子引入到了动态规划中,然后借助兑换零钱的例子,分析了动态规划最主要的三个性质,即: 重叠子问题 最优子结构 状态转移方程 但是动态规划远不止这么简单。 今天这篇文章,让我们深入动态规划,一窥动态规划的本质。 我们既然要彻底搞清楚动态
阅读全文
摘要:前言 我们刷leetcode的时候,经常会遇到动态规划类型题目。动态规划问题非常非常经典,也很有技巧性,一般大厂都非常喜欢问。今天跟大家一起来学习动态规划的套路,文章如果有不正确的地方,欢迎大家指出哈,感谢感谢~ 什么是动态规划? 动态规划的核心思想 一个例子走进动态规划 动态规划的解题套路 lee
阅读全文
摘要:一、动态规划三板斧 状态转移公式 循环 或 递归 性能优化 二、WHY 1、状态转移公式 动态规划与分治不一样,分治的问题是相互独立的,而动态规划的各个状态是有关联关系的。比如背包问题,你选择了 i 物品之后,背包的剩余容量要发生变化吧,对装别的物品就有影响了。 状态转移公式就是刻画这种关联的,一旦
阅读全文
摘要:链接:https://www.zhihu.com/question/23995189/answer/1094101149 对于动态规划,春招秋招时好多题都会用到动态规划,一气之下,再 leetcode 连续刷了几十道题 之后,豁然开朗 ,感觉动态规划也不是很难,今天,我就来跟大家讲一讲,我是怎么做动
阅读全文
摘要:链接:https://www.zhihu.com/question/23995189/answer/613096905来源:知乎 0. intro 很有意思的问题。以往见过许多教材,对动态规划(DP)的引入属于“奉天承运,皇帝诏曰”式:不给出一点引入,见面即拿出一大堆公式吓人;学生则死啃书本,然后突
阅读全文
摘要:我们之前说了二叉树基础及二叉的几种遍历方式及练习题 本文大纲 前序遍历 前序遍历的顺序是, 对于树中的某节点,先遍历该节点,然后再遍历其左子树,最后遍历其右子树. 我们先来通过下面这个动画复习一下二叉树的前序遍历。 迭代 我们试想一下,之前我们借助队列帮我们实现二叉树的层序遍历, 那么可不可以,也借
阅读全文
摘要:学算法的时候,递归确实是最绕的,这个东西怎么说呢,思路比较反自然思维.... 为啥说它反思维呢:自己调自己,而因为你在调用自己的时候只用了一个Fn-1,但事实上这个Fn-1代表了超级多个Fn-2Fn-3......,这是最让人思维感到难受的地方,但是用久了发现:真香 你只需要明白一个思想,就是面对一
阅读全文
摘要:作者:老刘链接:https://www.zhihu.com/question/31412436/answer/724915708 一. 引子 大师 L. Peter Deutsch 说过:To Iterate is Human, to Recurse, Divine.中文译为:人理解迭代,神理解递归
阅读全文
摘要:很多同学为什么学习递归 一看就会,一写就废! 这次我们要好好谈一谈递归,为什么很多同学看递归算法都是“一看就会,一写就废”。 主要是对递归不成体系,没有方法论,每次写递归算法 ,都是靠玄学来写代码,代码能不能编过都靠运气。 本篇将介绍前后中序的递归写法,一些同学可能会感觉很简单,其实不然,我们要通过
阅读全文
摘要:前言 递归是算法中一种非常重要的思想,应用也很广,小到阶乘,再在工作中用到的比如统计文件夹大小,大到 Google 的 PageRank 算法都能看到,也是面试官很喜欢的考点 最近看了不少递归的文章,收获不小,不过我发现大部分网上的讲递归的文章都不太全面,主要的问题在于解题后大部分都没有给出相应的时
阅读全文
摘要:不是每个程序员天生对递归理解深刻,刚入大一时候,当别人写出第一个求最大公约数的递归函数时,对其多么的惊叹,竟然可以不用循环,竟然代码可以这么简洁,确实递归在大多数情况下实现时候代码很短,大部分人也知道递归,也能基本看懂递归,可是却经常不知道怎么写,或者写出来的递归经常死循环,写算法往往也是学的是套路
阅读全文
摘要:单例模式特点:① 单例类只能有一个实例② 私有构造方法,不允许通过其他类创建单例类的实例③ 提供静态get方法返回单实例 饿汉式:类加载的时候就创建实例懒汉式:类加载时不创建实例,第一次调用get方法时才创建实例 饿汉式优点:简单,调用时速度快,无需考虑创建实例时线程安全问题饿汉式缺点:占用内存,可
阅读全文
摘要:单例模式(来自菜鸟教程) 单例模式(Singleton Pattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接
阅读全文
摘要:目录 一、什么是单例模式? 二、单例模式的应用场景 三、两种典型的方式实现单例模式 1.饿汉模式 2.懒汉模式 3.理解懒汉模式和饿汉模式 四、单例模式和线程的关系 1.饿汉模式是否线程安全? 2.懒汉模式线程安全吗?为什么? 2.1 如何改进懒汉模式?让代码变得线程安全呢? ———————————
阅读全文
摘要:文章目录1、内存空间有限,当缓存满的时候,如何淘汰缓存?2、实现LRU demo 使用Java容器LinkedHashMap 哈希表(HashMap)+双向链表 1、内存空间有限,当缓存满的时候,如何淘汰缓存?FIFO(First In First Out)先进先出LFU(Least Frequen
阅读全文
摘要:维基的简介:Paxos算法是莱斯利·兰伯特(Leslie Lamport,就是 LaTeX 中的"La",此人现在在微软研究院)于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。 Paxos算法目前在Google的Chubby、MegaStore、Spanner等系统中得到了应用,H
阅读全文
摘要:分支限界法 一、基本描述 类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。回溯法的求解目标是找出T中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出使某一目标函数值达到极大或极小的解,
阅读全文
摘要:1、概念 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。 回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术
阅读全文
摘要:贪心算法 一、基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的局部最优解。 贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必
阅读全文
摘要:一、基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。 二、基本思想与策略 基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为
阅读全文
|