Preface - 前言

    当时我一边刷OJ题目,一边把自己遇到的各种算法源码进行整理并归类,放在github库上。可过了半年之后再看这些代码,发现我已经完全不认识它们了。
    因为如果不理解算法背后的数学意义,只看代码确实很难搞清楚那些代码到底在干什么。

    我认为单纯的算法源码很难学习理解,而将算法图形化、公式化才是最容易让人理解的方式,因为可以从数学角度来准确的描述问题和解决过程。
    因此我将这些内容用自己的方式画出来,配合代码和测试,就形成了目前这本关于大学生计算机算法的书籍。它不再是简单的“源码”合集,而更加是一本“书”,

    本书的发布方式也几经周折。我需要一种能够同时展示文字段落、数学公式、插图和源代码这四个部分的载体,来展示自己的想法。之前尝试过用doc编写,到处pdf展示(github上可以直接浏览pdf文档)。但因为二进制文件(pdf)没办法被版本控制软件git去重,导致项目库臃肿,每次更新docx文档,都会生成新的pdf文件。

    后来尝试了markdown编写,再用visio绘制png图片,用github page来发布静态文档,这样可以避免生成pdf文件,但png图片仍然无法会占用大量的仓库存储。后来发现SVG这种基于文本文件且支持浏览器的图片可以完美解决,最终采用了来绘制SVG图片的方式。

    gitbook的发布方式支持markdown文档、Latex公式、SVG图片、展示源码、集成github代码库,而且通过gitbook站点可以直接分发本书。但由于gitbook的插件mathjax对website和ebook的支持存在bug,目前通过浏览器访问需要两次刷新才能正确显示Latex公式,而且pdf也无法正确下载。这些bug可能需要更久的时间等待gitbook及相关作者的修复,或者找到其它更好的替换方案。

    本书主要使用markdown编写文档、制作SVG插图、cmake管理C++11项目、发布书籍,编写时尽量与书中基本完成的前四章风格保持一致。


    西安交通大学计算机系

    林荣彬

    2014年2月16日