Leetcode Weekly Contest Round 246
久违的AK,题目不难,贴完代码就跑(狗头)。什么叫狗屎运啊(战术后仰)
Leetcode Weekly Contest Round 244
暴露了自己**超级弟弟**的事实,不管怎么说,先来梳理一下题目吧
关于阻塞非阻塞与同步异步的理解
一直对BIO、NIO、AIO模型理解不到位,特意整理了一下
这里先拉几篇有意思的知乎做一下补充理解:
链接
“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。
阻塞和非阻塞描述的是进程/线程在进行I/O操作时的状态,而同步与异步描述的是进程/线程相互通信的方式。
同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个调用时,在没有得到结果之前,该调用就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由调用者主动等待这个调用的结果。而异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在调用发出后,被调用者通过状态、通知来通知调用者,或通过回调函数处理这个调用。典型的异步编程模型比如Node.js举个通俗的例子:你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店 ...
Java线程池简单理解
暂时快速梳理一下Java线程池(毕竟都是速成的)
Leetcode Weekly Contest Round 243
头晕没参加,但这并不影响我事后插题~有几道题目还是有亿点点麻烦的
Leetcode Bio-Weekly Contest Round 53
还是有点小遗憾,脑子抽了T3没肝出来
A*算法解决八数码问题
介绍
八数码问题
八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。
所谓问题的一个状态就是棋子在棋盘上的一种摆法。棋子移动后,状态就会发生改变。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。
A*算法
A*算法是一种启发式搜索算法,启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径,提高了效率。
算法核心公式:
F = G + H
F - 决策的总代价
G - 从开始到决策时刻所花费的真实代价
H - 从决策时刻到目标的预估代价
其中G值是一个真实的代价,也就是从算法流程一开始到进行这个决策的时候,一共花费的代价。H值是一个预估的代价。在极端情况下,如果H是常量0,这个算法退化成广度优先搜索算法,即按照顺序的依次扩充每个节点。如果G是常量,这个算法 ...
Hanoi问题
Hanoi问题是经典递归问题,本文将描述Hanoi问题的起源和解法原理
二分查找的边界问题
二分问题的边界在很久以来一直是我的一个难以言表的痛点,经常一debug就是半天,这下仔细来分析一下二分查找的几种情况