- 博客(51)
- 资源 (11)
- 收藏
- 关注
原创 第6-6课:游戏中的 Zobrist 哈希算法和置换表(图文篇)
复杂棋类游戏的搜索和估值通常比较耗时,为了提高棋类游戏的 AI,人们通常会使用置换表,置换表存储的是一些已知棋局的评估结果,当遇到相同的棋局时,查置换表比再搜索一遍要高效。既然要查表,就意味着需要对棋局进行比较,人们通常采用哈希算法将棋局映射为固定长度的哈希值,然后通过比较哈希值实现对棋局的比较。在各种哈希算法中,Zobrist 哈希算法简单实用,并且高效,在各种棋类游戏算法中得到了广泛的应...
2020-09-22 12:17:06
1669
原创 第6-7课:Pierre Dellacherie 算法与俄罗斯方块游戏
编写一个俄罗斯方块游戏,涉及到键盘控制、定时器、UI 和复杂数据结构定义和使用,非常具有挑战性,很多编程爱好者自己也编写过俄罗斯方块游戏,该游戏有自己的 AI 算法,基本原理还是状态搜索和评估,这一课我们介绍著名的估值算法、Pierre Dellacherie 算法。当然,建立游戏的数据模型仍然是我们的重点。俄罗斯方块游戏 AI 的原理在游戏过程中,当一个板块下落的时候,旁边还会提示下...
2020-09-22 12:17:04
766
原创 第6-8课:分离轴算法(SAT)与碰撞检测(图文篇)
物体的碰撞检测是游戏软件中的关键算法之一,两个角色是否能够对话、子弹是否击中了物体,以及是否出现人物穿墙的 bug,都依赖于一套可靠的碰撞检测算法。有很多算法可以实现碰撞检测,基于算法几何的方法有轴对称包围盒算法(Axis-aligned Bounding Box,AABB)、方向包围盒算法(Oriented Bounding Box,OBB)、分离轴算法(Separating Axis T...
2020-09-22 12:17:03
1779
原创 第7-1课:余弦相似度与相似算法(图文篇)
相似度算法是计算个体之间相似程度的算法,此类算法多如牛毛,这里我们只讨论用于处理文字之间相似度的算法。文本之间的相似度计算应用广泛,比如论文抄袭的判断,就可以用相似度算法先预筛查一遍;再比如网站的文章自动分类,就是根据相似度将文章自动分入科技、体育、军事等类别中。此外,广告推送、订单识别等场合,也会用到文本相似度的判断。余弦相似度(余弦距离)通常用于判断相似度的理论有很多,比如欧氏距离...
2020-09-22 12:17:01
2146
原创 第7-2课:垃圾邮件过滤与贝叶斯分类算法
分类算法有很多种理论,比如决策树理论、K-最近邻法(KNN)理论、朴素贝叶斯理论、神经网络理论等,每种理论都有对应的分类算法。贝叶斯分类算法是众多分类算法中的一种,确切地说是一类,因为这类算法都是以贝叶斯定理为理论基础,所以被统称为贝叶斯分类。这一课我们将介绍贝叶斯分类算法,并用贝叶斯分类算法做一个简单的文本分类器,演示区分垃圾邮件和正常邮件的过滤器原理。贝叶斯定理贝叶斯(Thomas...
2020-09-22 12:17:00
1179
原创 第7-3课:K 最邻近算法(KNN)与手写数字识别
K 最近邻(KNN,K-Nearest Neighbor)算法是一类在数据挖掘领域常用的分类算法,该算法看似神秘,其实原理很简单,算法实现也很简单。KNN 算法在类别决策时,只参考极少量的相邻样本,也就是说主要靠周围有限的邻近样本,而不是靠判别类域的方法来确定所属类别,因此对于类域的交叉或重叠较多的待分样本集来说,KNN 方法较其他方法更为适合。这一课我们用 KNN 算法来实现一个简单的手写...
2020-09-22 12:16:58
445
原创 第7-4课:最大匹配算法-最简单的中文分词算法
在自然语言识别领域中,中文的分词技术绝对是一个很有意思的话题,英文本身是以单词为基础,单词之间以空格隔开,不存在分词的问题,但是汉语有这个问题。关于分词有很多可玩的地方,比如之前很火的一个对对联的小程序,给出上联可以自动对出下联,对上联的识别肯定是建立在正确的分词基础上的。这一课我们介绍一种理论简单、实现也简单的分词方法,当然,效果也就那样了,不过,拿来玩玩还是可以的。最大匹配法中文的...
2020-09-22 12:16:57
620
原创 第7-5课:格式化文件读写与 PCX 图像文件
这一课将介绍对格式化文件读写处理的常用算法,其实也算不上是算法,基本上是对有固定格式的二进制文件的常用处理方法,当然,解压缩数据的时候用到了 RLE(行程长度压缩)算法。我们选择的 PCX 文件是一种非常简单的图像文件格式,在 DOS 时代和早期的 Windows 时代非常流行。下面将讲解如何按照文档介绍的格式读取文件、显示图像内容,并按照文档要求的格式生成新的图像文件,当然,也会讲解大名鼎...
2020-09-22 12:16:55
464
原创 第7-6课:遗传算法的两个应用实例
之前我们介绍过一些求最优解的常用算法模式,比如贪心算法、动态规划算法、穷举算法,都是采用一种确定或几乎确定的方式来寻找最优解。所谓的确定性是指以上这些算法都是建立在确定性基础上的搜索算法,在搜索过程中遇到一个决策点时,对于选 a 还是选 b,其结果是确定的。比如贪婪法,就是按照贪婪策略选择,同样的条件下,每个决策选 1000 次结果都是一样的。 这一课我们要介绍的是随机化算法,该算法并不...
2020-09-22 12:16:54
5184
原创 结语:算法的那些事儿
终于,在 2019 年的第一天下午,《算法应该怎么玩》的最后一篇完成了,时间比我预想的要长(很多)。因为写一个精品课和写书是两个完全不同的体验,写精品课可以边根据读者的反馈边调整、完善内容,能和读者有一个直接的接触,了解他们的想法或遇到的问题;而写书就不同了,必须全部完稿后,经过三审三校才能出版,而这期间,万一遇到技术升级等,那么图书出版后还要考虑后面的修订版……学习算法要达到的目的当大家看到...
2020-09-22 12:16:52
296
原创 C++20,说说 Module 那点事儿
几天前,C++20 草案已经获得了标准委员会的全票通过,C++2a 草案讨论的几个重要内容,比如“概念(concept)”、“范围库(Ranges Library)”、“协程(Coroutines)” 和 “模块(Module)” 都加到 C++20 的标准中了,剩下的就是看编译器厂商的支持速度了。目前看 CLANG 、GCC 和 Microsoft 是比较积极的三家,语言特性和库支持的最快的是 GCC,其次是 CLANG 和 Visual C++,估计最快到年底就能看到支持全部 C++ 20 特性的编译器
2020-09-19 14:32:46
3164
thunderbird 2_0_0_16 中文语言包
2008-09-06
firefox 3_0_1 中文语言包
2008-09-06
Google Breakpad 源代码
2008-09-06
Herb Sutter - Conversation 经典对话系列
2008-09-06
用Visual Studio 2005编译Firefox所需要的补丁
2008-08-18
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人