经典互斥问题:面包店算法
经典互斥问题:面包店算法
|
介绍面包店算法是在多线程环境下无锁的互斥算法,能够保证在多线程的环境下,临界区同时至多只有一个线程进入。虽然算法回看起来并不难,但却是图灵奖得主 Lamport 最骄傲的成果之一。面包店算法要解决的本质是一个互斥问题,其是由 Dijkstra 提出的,另一个图灵奖得主。在计算机发展过程中,有相当多人
Randomized-Select 算法详解
Randomized-Select 算法详解
|
Randomized-Select 算法详解前言在一个长为 n 的无序序列中,查找第 k 个大或小的元素,Randomized-Select 算法可以实现时间复杂度为 O(n) 的查找。在网上查了一些资料,都没有讲解为什么该算法时间复杂度是 O(n),于是看了《算法导论》,看了原版的推导和证明,这里
十大经典排序算法(C++实现)
十大经典排序算法(C++实现)
|
前言目前 Leetcode 刷题刷到排序算法部分,回顾一下十大经典排序算法。1. 冒泡排序特性说明时间复杂度O(n^2)有序时最好 O(n)空间复杂度O(1)稳定性稳定排序细节:如果有序,直接返回void bubble_sort(vector<int> &nums){ bo
环路检测算法 Floyd's Tortoise and Hare 保姆级详解
环路检测算法 Floyd's Tortoise and Hare 保姆级详解
|
算法 |
0 评论
迭代是计算机中最基本的一种执行模式,几乎任何程序都需要用到迭代(即循环)。环路检测就是应用在具有迭代结构的程序里,用于检测程序是否会在一个环路中死循环,或是用来检测图、链表或状态机等结构中是否含有环。
alpha-beta剪枝算法详解
alpha-beta剪枝算法详解
|
算法 |
0 评论
前言承接极小化极大算法,它穷举了所有的博弈树节点,从而计算出一条最佳路径,但实际上有些分支是没必要计算的。alpha-beta算法就是对博弈树进行剪枝操作,减少计算开销。但其剪枝效率一定程度取决于走步生成算法,这会在后面进行解释。alpha-beta剪枝我们构造一个简单的博弈树,如下图所示:我们无需
24点算法:思考与记录
24点算法:思考与记录
|
算法 |
0 评论
前言突然回想起小时候玩扑克牌时常玩的游戏,24点。四张扑克牌,可以随意用加减乘除运算进行组合,最终能凑成24,是一个考验心算的小游戏。于是就想尝试用计算机实现,看看有多少种可能,不过24点是很容易穷举的,可能性并不多。最终程序跑出来,一共有28561种组合,其中22615种都可以凑出24点,成功率有
极小化极大算法保姆级详解
极小化极大算法保姆级详解
|
算法 |
0 评论
前言极小化极大算法通常用于完全信息的零和博弈中,即双方的所有信息都是已知的,例如五子棋、象棋。它基于这样一个假设,对方一定会走最利于自己的走法,于是我们在这样的条件下寻找一种最优的策略路径使得己方的收益最大。换句话说,如果在对方最优的走法下我们还能获得优势,则对方走出次优的走法,我们也一定能获得优势
  • 1