最新 | 最热门 | 最高评价

+0  functor applicative 和 monad

Tag: 算法
鸟窝 发于 2017年10月05日 22:30 | 点击: 652 | 展开摘要
Monad 函数式编程中的一个概念, 在 Haskell 和 Scala 语言中用的比较多。

这个概念来源于数学中的范畴学,过于学术化,我看国内的文章介绍的很多,但是准确、清晰而简要的介绍的文章却没有看到。

我也不准备介绍,因为我对它的理解也不够深,这里引用 Functors, Applicatives, And Monads In Pictures一文中的图片和总结,来加深一下自己的理解。

functors: you apply a function to a wra

查看全文: http://www.udpwork.com/item/16443.html

+0  支持部分共享的树结构

Tag: 算法 | 优化与技巧
云风 发于 2017年06月18日 16:23 | 点击: 465 | 展开摘要
因为图形引擎中的对象天然适合用树 (n-ary tree) 表达,所以它在图形引擎中被广泛使用。通常,子节点会继承父节点的一些状态,比如变换矩阵,在渲染或更新的时候,可以通过先序遍历逐级相乘。

在 PC 内存充裕的条件下,我们通常不必考虑树结构储存的开销,所以大多数图形引擎通常会为每个渲染对象独立生成一个树结构,比如 Unity 中的 GameObject 就是这么一个东西。在 Ejoy2D 中,从节约内存的角度考虑,把树节点上的一部分可共享的状态信息(不变的矩阵、纹理坐标

查看全文: http://www.udpwork.com/item/16307.html

+0  浅谈 WHR 全历史排名

Tag: 算法
云风 发于 2016年03月16日 21:25 | 点击: 772 | 展开摘要
这几天 AlphaGo 4:1 战胜了李世石,围棋积分网站 给了 AlphaGo 一个世界排名。在 3:1 的时候是世界第四,4:1 后上升到了世界第二。

我很好奇这个网站是如何给棋手打分的,便顺着链接指引翻了下 wikipedia 读了几篇 paper 。

下面是我的一些理解,由于我的数学基本功不太扎实,难免有错误,所以有兴趣的同学最好自己读论文 。

首先,如何定义等级分这个东西?

在一对一竞技类游戏中,假设规则是公平的,对战双方如果都能给出最优策略,那么胜负概率是

查看全文: http://www.udpwork.com/item/15333.html

+0  “残酷”的事实

Tag: Commentary | code review | 吐槽 | 学校 | 工作 | 算法 | 编程 | 面试
四火 发于 2015年10月21日 14:21 | 点击: 1192 | 展开摘要
下面这些文字来自我在知乎的回答:“在真实工作中的编程是怎么样的,与学校里有什么不同?”。

入行愉快。

首先,一言以蔽之,用两个字来概括,就是“残酷”,但是,好在是加引号的。有的不但残酷,还很无奈;有的则是在残酷的同时,还很有趣。搞工程和学校里的象牙塔大不相同,这也许老早就知道,但是绝对不是七八年前我想象的模样。你可以把它当成我没睡醒的呓语,也可以当成我喝多的胡话,或者是心情太差的时候写的吐槽檄文。反正,它们就在那里,事实就在那里。

总的来说,学校里面编程,或者在工作之余

查看全文: http://www.udpwork.com/item/14694.html

+0  lua 分配器的一些想法及实践

Tag: lua与虚拟机 | skynet | 算法
云风 发于 2015年07月28日 14:33 | 点击: 793 | 展开摘要
从周末开始, 我一直在忙一个想法。我希望给 skynet 中的 lua 服务定制一个内存分配器。

倒不是为了提升性能。如果可以单独为每个 lua vm 配置一个内存分配器,自己调用 mmap 映射虚拟内存,就可以为独立的服务制作快照了。这样可以随时 fork 出子进程,只保留关心的 vm 的内存快照。主要可以有三个用途:

可以在快照上做序列化,并把结果返还父进程。通常做序列化有一定的时间代价,如果想定期保存的话,这个代码很可能导致服务暂停。

可以利用快照监控检查泄露。定

查看全文: http://www.udpwork.com/item/14443.html

+0  对象到数字 ID 的映射

Tag: skynet | 算法
云风 发于 2015年04月10日 14:37 | 点击: 821 | 展开摘要
skynet 中使用了一个 hash 表结构来保存服务和 32bit 数字地址的映射关系。

一个 skynet 的服务,其实是一个 C 对象。在有沙盒的系统中,尤其是并行构架,我们很少直接用 C 对象指针来标识一个 C 对象,而是采用数字 id 。用数字做 handle 可以让系统更健壮,更容易校验一个对象是否还有效,还可以减少悬空指针,多次释放对象等潜在问题。比如,操作系统为了把用户程序隔离在用户态,像文件对象就是用数字 id 的形式交给用户程序去用的。

和操作系统通常

查看全文: http://www.udpwork.com/item/14082.html

+0  如何拼接 PVR 压缩贴图

Tag: 算法 | 优化与技巧
云风 发于 2015年01月08日 18:41 | 点击: 1002 | 展开摘要
2d 游戏通常都用到很多图素,由于显卡硬件特性,我们又不会把单个图素放在独立贴图中。这样会导致渲染批次过多。在移动设备上,非常影响渲染效率。

所以,游戏运行时,这些图素一般都会合并在很少几张贴图上。要么采用离线合并的方式(利用 texture packer 这样的工具),或者在运行时使用装箱算法。

最近,朱光同学一直在为 ejoy2d 编写运行时合并图素的模块。今天我们讨论了一下他做的诸多尝试。

为了提高贴图利用率,我们可以把大的不规则图素先拆分成小块,然后再组合起来。

查看全文: http://www.udpwork.com/item/13756.html

+0  Leetcode 编程训练

Tag: C/C++语言 | 杂项资源 | 编程语言 | Algorithm | C++ | Leetcode | Programmer | Programming | 程序员 | 算法 | 面试
陈皓 发于 2014年10月23日 10:51 | 点击: 2389 | 展开摘要
Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google、微软、Facebook、Amazon之类的这些公司,基本上是应试教育的功利主义。

我做这些题目的不是为了要去应聘这些公司,而是为了锻炼一下自己的算法和编程能力。因为我开始工作的时候基本没有这样的训练算法和编程的网站,除了大学里的“算法和数据结构”里的好些最基础最基础的知识,基本上没有什么训练。所以,当我看到有人在做这些题的时候,我也蠢蠢

查看全文: http://www.udpwork.com/item/13421.html

+0  趣题:竞技场里的狮子能否保证抓住最高速度相同的小明?

Tag: 几何 | Uncategorized | 算法 | 趣题 | 极限
admin 发于 2014年08月30日 03:38 | 点击: 1236 | 展开摘要
小明和狮子同被关在一个半径为 10 米的竞技场里,狮子位于竞技场的圆心处,小明则在距离圆心 1 米的地方。两者的最大运动速度都是每秒 1 米。狮子有没有什么必胜策略,使得不管小明怎么跑,它总能在有限的时间里抓住小明?

根据 MathWorld 相关词条的描述,这个问题是由 R. Rado 在 1925 年时提出的。一个经典的“答案”是,狮子只需要始终保持自己与小明在圆盘的同一半径上即可。直觉上看,由于狮子总是处在“内圈”上,因而不管小明跑到了哪里,狮子总能轻松地与小明继续保

查看全文: http://www.udpwork.com/item/13182.html

+0  Penney 的游戏:正所谓后发制人,先发制于人

Tag: 游戏 | Uncategorized | 算法 | 组合数学 | 证明 | 概率
admin 发于 2014年07月10日 21:36 | 点击: 1014 | 展开摘要
让我们来玩一个游戏。连续抛掷硬币,直到最近三次硬币抛掷结果是“正反反”或者“反反正”。如果是前者,那么我获胜,你需要给我 1 元钱;如果是后者,那么你获胜,我会给你 1 元钱。你愿意跟我玩这样的游戏吗?换句话说,这个游戏是公平的吗?

乍看上去,你似乎没有什么不同意这种玩法的理由,毕竟“正反反”和“反反正”的概率是均等的。连续抛掷三次硬币可以产生 8 种不同的结果,上述两种各占其中的 1/8 。况且,序列“正反反”和“反反正”看上去又是如此对称,获胜概率怎么看怎么一样。



查看全文: http://www.udpwork.com/item/12723.html

+0  子串复杂度、平衡 01 串与 Sturmian 串

Tag:  图形 | Uncategorized | 算法 | 组合数学 | 证明
admin 发于 2014年06月09日 03:34 | 点击: 1021 | 展开摘要
让我们先从两个小问题开始说起。第一个问题是,是否存在某个无限不循环的 01 串,使得对于任意一个正整数 n ,该 01 串中长度为 n 的子串都有且仅有 n + 1 种?

或许这个问题来得有些突然。让我们慢慢解释一下,这个问题是怎么来的。衡量一个 01 串的复杂程度有很多办法,比方说,我们可以去考察它的“子串复杂度”(subword complexity),即子串的种类有多丰富。我们用 pw(n) 来表示,在一个(有可能无限长的)数字串 w 当中,长度为 n 的子串一共有多

查看全文: http://www.udpwork.com/item/12606.html

+0  保加利亚单人纸牌游戏

Tag: Uncategorized | 算法 | 组合数学 | 证明
admin 发于 2014年03月26日 00:52 | 点击: 714 | 展开摘要
保加利亚单人纸牌游戏(Bulgarian solitaire)的玩法如下:

取出 45 张牌,然后把它们随意分成若干堆。接下来,从每一堆里各取一张牌,叠在一起形成一堆新的牌。不断这样做下去,如果某个时候桌面上正好有 9 堆牌,并且各堆牌数分别为 1, 2, 3, 4, …, 9 ,你就获胜了。

乍看上去,如果初始局面设定不佳,游戏很可能会陷入某个循环,从而永远无法获胜。然而, 1981 年,丹麦数学家 Jørgen Brandt 证明了,对于任意一个初始局面(包括把所有牌

查看全文: http://www.udpwork.com/item/12070.html
|<<<1234567>>>| 一共11页, 127条记录