最新 | 最热门 | 最高评价

+0  并发编程的核心技术 – 多版本(Multi Version)

Tag: C/C++语言编程 | Computer System | 分布式 | 数据库 | 算法
ideawu 发于 2021年04月17日 18:20 | 点击: 104 | 展开摘要
在单机编程时代, 每一项数据只有唯一的一份, 对数据的修改也是 in-place 的. 但是, 在并发编程领域, 包括分布式系统, 数据多版本(Multi Version, Versioning)是核心.

我们先从单机编程的内存操作出发. 对于内存的操作, 都是原地(in-place)更新的. 对象和内存空间强绑定, 当更新对象时, 是将对象的内存空间擦除然后用新数据写覆盖. 到了多线程编程时代, 就引入了锁机制, 因为擦除和写操作过程不是原子性的, 可能擦除到一半时, 就

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

+0  如何实现和优化 SVM(支持向量机)?

Tag: 人工智能 | AI | 算法
skywind 发于 2019年04月08日 14:50 | 点击: 78 | 展开摘要
学习 SVM 的最好方法是实现一个 SVM,可讲理论的很多,讲实现的太少了。

假设你已经读懂了 SVM 的原理,并了解公式怎么推导出来的,比如到这里:

SVM 的问题就变成:求解一系列满足约束的 alpha 值,使得上面那个函数可以取到最小值。然后记录下这些非零的 alpha 值和对应样本中的 x 值和 y 值,就完成学习了,然后预测的时候用:

上面的公式计算出 f(x) ,如果返回值 > 0 那么是 +1 类别,否则是 -1 类别,先把这一步怎么来的,为什么这么

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

+0  一种 16 倍抗锯齿字体渲染的方法

Tag: 算法 | 游戏开发
云风 发于 2019年01月08日 18:01 | 点击: 2186 | 展开摘要
昨天读了几篇文章,讲解了一种新的抗锯齿字体渲染的方法 。

我觉得颇有意思,就试着实现了一版 CPU 版本,想看看针对中文的效果。虽然最后觉得这个算法对游戏领域的实用性不大,不过还是挺有启发的。这里写写我对这个算法的理解,以及我所理解的算法局限性。

原文讲解的非常细致,还配了不少图片,我就不再重复了,只简单说两句。

我认为发明这个算法的动机是 “Our UI has a lot of smooth animation, text should be able to mov

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

+0  判断点是否在三角形内的算法精度问题

Tag: 算法 | 优化与技巧
云风 发于 2018年11月09日 10:36 | 点击: 1544 | 展开摘要
今天一个同事反应,在使用 recastnavigation 库时,判断一个点是否在一个三角形内,遇到了精度问题,而且精度误差很大。

具体是 dtClosestHeightPointTriangle 这个函数。

他给出了一组测试参数,abc 三点为 {261.137939, 8.13000488} , {73.6379318, 8.13000488}, {76.9379349, 10.2300053} ,测试 p 为 {74.4069519 , 8.6193819 } 应该

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

+0  局部敏感哈希介绍

Tag: 算法
鸟窝 发于 2018年08月29日 22:03 | 点击: 811 | 展开摘要
传统的Hash当源数据有些许的变化的时候生成的哈希值差异也非常的大, 比如:

1
2
3
4
5
6
7
8
9
10

func main() {
s1 := []byte("你好世界")
s2 := []byte("你好,世界")

hash1 := md5.Sum(s1)
hash2 := md5.Sum(s2)

fmt.Println(hex.EncodeToString(hash1[:]))
fmt.Println(hex.EncodeToStrin

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

+0  局部敏感哈希介绍

Tag: 算法
鸟窝 发于 2018年08月16日 19:56 | 点击: 1008 | 展开摘要
传统的Hash当源数据有些许的变化的时候生成的哈希值差异也非常的大, 比如:

1
2
3
4
5
6
7
8
9
10

func main() {
s1 := []byte("你好世界")
s2 := []byte("你好,世界")

hash1 := md5.Sum(s1)
hash2 := md5.Sum(s2)

fmt.Println(hex.EncodeToString(hash1[:]))
fmt.Println(hex.EncodeToStrin

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

+0  数学运算的实时编译及 Lua 中的一点奇技淫巧

Tag: lua与虚拟机 | 算法 | 优化与技巧
云风 发于 2018年07月12日 11:24 | 点击: 1150 | 展开摘要
我为 3d engine 项目设计的向量运算库 已经用了一段时间了。在使用过程中也一直在改进 。从一开始,我就考虑过,这个库的设计主要考量是减少 lua 和 C 交互间的开销,提高内聚性。而易用性方面,计划再上面再做封装。这段时间继续在想怎样从更自然的表达形式转换到这个库的逆波兰指令流上。

大致的方向有两个:

其一,实现一个小语言,用字符串输入表达式组。

其二,利用 Lua 已有的语法解析设施,把 lua 的一个函数翻译成对应的数学运算指令流。

两者都可以看成是一种

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

+0  Ericsson Texture 压缩贴图 EAC 的编码器

Tag: 技术 | 算法 | 优化与技巧
云风 发于 2018年05月22日 15:13 | 点击: 1133 | 展开摘要
最近在做新引擎 UI 模块的工作。汉字字体纹理需要占比较大的一张贴图,考虑到这张贴图只需要用一个通道就够了,所以我决定使用压缩贴图。在手机设备上,GL_COMPRESSED_R11_EAC 是一个不错的选择。

EAC 是 Ericsson 提出的对单通道贴图的压缩方案,现已进入 OpenGL 的官方标准。它通常会结合 ETC2 一起使用。ETC2 负责 RGB 部分,EAC 负责 Alpha 通道。偶尔也可以单独使用。它会将每个像素解码为 [0,2047] 的整数,有 11

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

+0  基础优化-最不坏的哈希表

Tag: 编程技术 | 算法
skywind 发于 2017年12月08日 19:14 | 点击: 1363 | 展开摘要
哈希表性能优化的方法有很多,比如:

使用双 hash 检索冲突

使用开放+封闭混合寻址法组织哈希表

使用跳表快速定位冲突

使用 LRU 缓存最近访问过的键值,不管表内数据多大,短时内访问的总是那么几个

使用更好的分配器来管理 keyvaluepair 这个节点对象

上面只要随便选两条你都能得到一个比 unordered_map 快不少的哈希表,类似的方法还有很多,比如使用除以质数来归一化哈希值(x86下性能最好,整数除法非常快,但非x86就不行了,arm还没有整数

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

+0  AVL/RBTREE 实际比较

Tag: 编程技术 | 算法
skywind 发于 2017年12月08日 18:37 | 点击: 1193 | 展开摘要
网上对 AVL被批的很惨,认为性能不如 rbtree,这里给 AVL 树平反昭雪。最近优化了一下我之前的 AVL 树,总体跑的和 linux 的 rbtree 一样快了:

他们都比 std::map 快很多(即便使用动态内存分配,为每个新插入节点临时分配个新内存)。

项目代码在:skywind3000/avlmini

其他 AVL/RBTREE 评测也有类似的结论,见:STL AVL Map

谣言1:RBTREE的平均统计性能比 AVL 好

统计下来一千万个节点插入

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

+0  functor applicative 和 monad

Tag: 算法
鸟窝 发于 2017年10月05日 22:30 | 点击: 1693 | 展开摘要
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 | 点击: 1310 | 展开摘要
因为图形引擎中的对象天然适合用树 (n-ary tree) 表达,所以它在图形引擎中被广泛使用。通常,子节点会继承父节点的一些状态,比如变换矩阵,在渲染或更新的时候,可以通过先序遍历逐级相乘。

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

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