Calvin's Marbles


  • 首页

  • 关于

  • 归档

  • 标签

  • 搜索

黄山游记

发表于 2017-08-20

黄山之行屡屡被耽搁,终于在第四次勉强成行。

阅读全文 »

Manacher算法

发表于 2017-08-11

我们知道优化非启发性算法的方法常常包括使用定理、利用计算机的架构特点、使用恰当的数据结构以及动态规划等。而动态规划的核心理念就是减少重复计算。
对于回文串问题的Manacher算法来说,我们要重用0..(i-1)的结果,那怎么重用呢?假设i和j关于p(i > p > j)对称,那么R[i]便可通过R[j]求得。
计算最长回文串的暴力算法是O(n^2),而马拉车算法能够在O(n)时间内解决问题。

阅读全文 »

不动点组合子Y-Combinator

发表于 2017-07-28

不管怎样,可以把 lambda 当做一个匿名函数来看待,那么这个匿名函数如何在递归调用的时候引用自己呢?Haskell B. Curry给出了Y不动点组合子(Y Combinator,当然不是那个著名的公司啦)可以解决这个问题。在本文中:

  1. 基于 Haskell 如何在匿名函数中调用自己
    1. 在其他语言中,如何解决 Lazy Evaluation 的问题
    2. 自定义的 fix 中,如何避免递归调用 fix
  2. 基于 Python 的 Demo
    1. Python 如何在匿名函数中调用自己
    2. Python 中的 Y Combinator
    3. Z Combinator
  3. 基于 C++ 的 Demo
  4. 为什么通过找不动点可以解决自我调用的问题
    1. 什么是不动点
    2. 不动点和本问题的联系
  5. 简单的 lambda 演算
  6. 证明 Y-Combinator 的性质 Y f = f (Y f)
    讨论 Y-Combinator 的类型
阅读全文 »

神器Continuation

发表于 2017-07-24

Continuation、Coroutine和Generator是异步编程中的一些概念。通过Continuation能够实现Coroutine和Generator。

Continuation常有两种实现,一种是以call/cc(call with current contination)为代表的语言级别的实现;另一种对于不能原生支持Continuation的语言但是支持闭包(函数作为一等公民)的语言,可以使用CPS(continuation-passing style)来实现Continuation。

阅读全文 »

贵州游记

发表于 2017-07-11

一直以来,贵州一直出现在卓林的自黑之中。什么江苏六州、南京四省省会,和伟哥那段“贵州山水甲天下”、“贵州简称赣”的梗更是屡屡被提起。于是今年暑假在他的热情邀请下,我们去贵州进行了一次非常幸运与快乐的旅行。主要行程包括镇远-凯里-安顺-麻尾-荔波。

阅读全文 »

魔方公式总结

发表于 2017-06-09

基本规律

  1. x, y, z系操作后不影响面的转动方向
    例如对于公式y’ U’ (R’ U R),经过y’后变为U’ F’ U F,只有转R变成了转F,但方向是不变的
  2. 常用手法
    1. fsc1: R U R’ U’
      将当前槽起到顶层
    2. fsc2: U R U’ R’
      fsc1的反操作
    3. s: U’ F’ U F
    4. t: U R U’ R
阅读全文 »

Word用法

发表于 2017-05-20

微软Office产品的特点是看上去非常弱智,但实际用起来各种棘手。比较麻烦的有自动添加引用文献、设置多级标题、自动续表等工作。这里介绍以下我的方法。

阅读全文 »

明史之太祖本纪

发表于 2017-05-20

去敦煌玩回来的时候,卓林兄说其实明史是写的不错的,建议我读读。

阅读全文 »

敦煌游记

发表于 2017-04-25

三月份,我法发现去敦煌非常实惠,于是招贤纳士,最终克服重重阻碍,确定4月19日前往兰州,20日晚从兰州前往敦煌,4月21日和22日在敦煌游览两天并在23日前往嘉峪关,23日晚从嘉峪关到兰州,并于24日晚从兰州返程。

阅读全文 »

multiprocessing模块用法

发表于 2017-04-18

由于一些历史原因,我们常用的CPython具有全局解释器锁(GIL)机制,这把全局大锁导致Python的多线程性能非常糟糕,为了解决这个问题,一种方案是使用协程代替多线程,由于自带了yield,Python实现协程相对于C++那种动辄setjmp或者CPS,抑或利用Linux.ucontext等基于运行时的组件的方式相比要优雅了一些。不过协程对于IO密集型的程序用处很大,但如果我们想要实现并行,那么使用多进程来取代多线程就是一个必由之路。
multiprocessing和multiprocessing.dummy是Python下两个常用的多进程和多线程模块。

阅读全文 »
1…192021…28
Calvin Neo

Calvin Neo

271 日志
155 标签
RSS
GitHub Twitter Weibo
Links
  • xqq
  • wenwen
  • zyyyyy
© 2015 - 2026 Calvin Neo   Hosted by Coding Pages
版权声明
由 Hexo 强力驱动
主题 - NexT.Muse