0%

图是一种非常有用的数据结构。很多问题可以看作是图来处理,如迷宫、网络等等。有的时候,我们需要寻找图的连通分量。如LeetCode的721题(账号整合),解法的中心思路就是把Email看作是图中的节点,通过动态的增加边(把在同一个账户中的Email连接起来),最后读出图中的所有连通分量。这里,我们介绍一种专门处理图的动态连接性问题的算法——Union-Find。

阅读全文 »

在Git中,可以通过GPG加密的方式保证在commit传输的过程中不受篡改。在Windows中,可以用VS Code自带的版本控制提交带GPG签名的commit。但是一遇到对应的GPG密钥带有密码的时候,VS Code自带的版本控制(准确地来说是所调用的git程序)就无法对commit进行签名。具体会提示gpg: cannot open tty 'no tty': No such file or directory。原因在于gpg程序无法获取密码以进行签名。由于文档的不足,我尝试了很多方法去解决这一问题。最近看到#17014之后,突然了解了需要gpg-agent才能使GPG签名功能正常使用。本文将会描述如何在Windows中做出这些改变。

阅读全文 »

数组是非常好用的东西。有的时候,我们想要初始化一个固定长度的数组。Python提供了一个非常简便的写法[elem_to_repeat] * num_time,如[0] * 4,会初始化一个长度为4,元素全为0的数组[0, 0, 0, 0]。这种写法在处理一维数值型、布尔型数据的时候不会产生问题。但是,通常人们会不了解这种写法的真实意义,即_将elem_to_repeat的引用_重复num_time遍来初始化数组。

阅读全文 »

对于一个含有很多随机变量的复杂的分布而言,所有可能的事件可能非常多,如果用每一个事件对于一个描述概率的参数的话,显然参数的个数会非常的多,甚至不可行。但是现实世界中,随机变量之间常常会有联系,如果我们能够在模型构建的过程中将这些联系考虑进去的话,会大大减少表示这个模型所需要的参数。要描述随机变量之间的联系,很自然地,我们会想到用。所以概率图模型就是这样一个通过引入随机变量之间的联系,来对概率模型进行建模的一种框架。

一直以来,我自认为是一个自由主义者。我尊重所有人说话的权力,尽管有的时候我不同意你的意见。我支持所有人都有不受限制的访问互联网的权利,这是互联网诞生的意义。地球的所有公民能够在一个友善祥和的气氛中,通过无处不在的互联网,分享自己的所见所学,共同进步。小时候从学到互联网的时候,我觉得互联网应该就是这样的。直到现在,依然如此觉得。

阅读全文 »

DDLC logo

Galgame,一个非常小众的游戏类型。在我的印象之中,它一直是由日本厂商制作的一类视觉小说。里面有非常多的可爱的女孩子(或者说男孩子www)可攻略,有很多非常好看的立绘,或者……咳咳!。它的制作成本可能只有3A大作的零头。但是其中有一些作品,玩它就像读一本精致的小说一样,能够让人沉浸于里面的故事中。然而,大多数的故事一般都能够用以下概括:“由于某种事件,你所控制的主人公与开始喜欢上女主角或者被女主角喜欢,然后通过日常培养感情,直至开始真正触及恋爱的核心。”所以,这又可以被看为“Dating Simulator”(约会模拟器)。最近由于日本动画/漫画市场的发展,越来越多的人们接触到了这个原来属于资深宅才会探索的领域,因此,市场开始供给越来越多的作品。可以看到,最近越来越多的Galgame登陆steam平台,其中更包含很多我国本地制作组的作品。

阅读全文 »

MATLAB 因为其“标准库”具有丰富的功能(包括内置的函数以及工具箱),能够很容易地实现工程中的很多算法,因此一直是学术界事实上的仿真软件的标准。关于他的便利性,有一次我甚至在不知道 FFT 的细节的情况下,依靠查阅文档在 30 分钟之内写出了一个使用 FFT 对信号进行频域分析的小程序,包含数据输入和数据可视化。包含超过一半的注释,代码不到 100 行。可以理解为什么在学术界以及工程界,MATLAB 能够得到近似必修课一样的待遇。

但是,在需要在 MATLAB 中构建一个稍微复杂一点的系统的时候呢?MATLAB 会迅速地变得糟糕起来。有时甚至需要非常反直觉的 trick 才能够实现一些编程中的 essential practice。一方面,MATLAB 本身语言上还是有极大的缺陷。一方面 MATLAB 文档只是 how to do 而缺少 why to do,使得我们很难去抓住高级用法的本质,更谈不上用到 MATLAB 设计者想象中预想的最佳实现。

阅读全文 »

本文收录了一些机器学习中常用的概率分布。其中的大部分摘自《Machine Learning a probalistic perspective》。这篇文章是一篇参考性质的文章,仅罗列结论而不会关心它的来源。本文将会在学习过程中随时更新。

阅读全文 »

Atom是一款非常流行的文本编辑器。借由庞大的插件支持,用户可以把它改造成适合自己的开发环境使用。但是由于众所周知的原因,在某地要更新插件并不容易。有时会刷不出来可更新插件的列表,即使能够刷出来,更新也可能因为各种网络原因而失败。解决这一问题,为Atom的更新服务挂上代理是一个不错的解决方案。

阅读全文 »

在使用国外的代理服务器时,常常会因为各种不稳定因素导致在直连时连接的丢包率特别高。对于一些对丢包率特别敏感的游戏(没错,说的就是舰队Collection),使用丢包率高的线路进行游戏是一件非常痛苦的事情。有的时候,游戏限定某个地区的IP才能够接入(没错,说的还是舰队Collection),所以必须使用架设在那个地区的代理服务器A。这两项加起来就有点麻烦了。但是,如果我们能够找到一个中继服务器B,从本地直连到中继服务器B的丢包率非常低,而从中继服务器B到目标服务器A的丢包率也非常低,这样我们就能够形成一条丢包率较低的线路。这样一条线路有效地提升了那些丢包率敏感的游戏体验。

本地<->中继服务器B<->代理服务器A

在这里,我们在中继服务器B上使用Haproxy将请求转发到目标服务器A上。注意Haproxy只支持TCP连接的转发。

阅读全文 »