推荐书籍、电影……读书程序员的日常

算法学习笔记

2016-03-07  本文已影响847人  IT程序狮

作者:@移动开发小冉
原文地址:https://github.com/nonstriater/Learn-Algorithms

算法虐我千百遍,我待算法如初恋。

这里的内容是我学习算法过程的一些记录,希望能一直坚持下去。

学习方法

基本数据结构和算法

这些算法全部自己敲一遍:

链表

二叉树

哈希表/散列表 (Hash Table)

字符串算法

图的算法

排序算法

交换排序算法

线性排序算法

查找算法

15个经典基础算法

海量数据处理

算法设计思想

推荐阅读

刷题必备

基础

算法设计

延伸阅读

参考链接和学习网站

基本算法演示

编程网站

其它

高级数据结构和算法 北大教授张铭老师在coursera上的课程。完成这门课之时,你将掌握多维数组、广义表、Trie树、AVL树、伸展树等高级数据结构,并结合内排序、外排序、检索、索引有关的算法,高效地解决现实生活中一些比较复杂的应用问题。当然coursera上也还有很多其它算法方面的视频课程。

算法设计与分析 Design and Analysis of Algorithms 由北大教授Wanling Qu在coursera讲授的一门算法课程。首先介绍一些与算法有关的基础知识,然后阐述经典的算法设计思想和分析技术,主要涉及的算法设计技术是:分治策略、动态规划、贪心法、回溯与分支限界等。每个视频都配有相应的讲义(pdf文件)以便阅读和复习。

补充:C语言代码规范

这里面的算法代码均使用C语言完成,养成良好的代码规范习惯,不但可以写出优质的代码,也可以更快的阅读其他优秀开源代码。代码规范主要有:

符号命名

局部变量 尽量短,能表达清楚意思即可,能简写就简写,比如"err" 表示 "error"; "fd" 表示文件描述符 ,循环变量可以使用i,j,k;结构体成员变量不需要"m_"前缀;全局变量"g_"开头。

常量名 全大写,单词之间"_"分割,如 "MAX_NUMBER_OF_SLAB_CLASSES" ;
宏定义 对于options 宏定义,适当使用前缀 ,比如:

/* Client classes for client limits, currently used only for
 * the max-client-output-buffer limit implementation. */
#define CLIENT_TYPE_NORMAL 0 /* Normal req-reply clients + MONITORs */
#define CLIENT_TYPE_SLAVE 1  /* Slaves. */
#define CLIENT_TYPE_PUBSUB 2 /* Clients subscribed to PubSub channels. */
#define CLIENT_TYPE_MASTER 3 /* Master. */
#define CLIENT_TYPE_OBUF_COUNT 3 

枚举 使用前缀:

enum conn_states {
    conn_listening,  /**< the socket which listens for connections */
    conn_new_cmd,    /**< Prepare connection for next command */
    conn_waiting,    /**< waiting for a readable socket */
    conn_read,       /**< reading in a command line */
    conn_parse_cmd,  /**< try to parse a command from the input buffer */
    conn_write,      /**< writing out a simple response */
    conn_nread,      /**< reading in a fixed number of bytes */
    conn_swallow,    /**< swallowing unnecessary bytes w/o storing */
    conn_closing,    /**< closing this connection */
    conn_mwrite,     /**< writing out many items sequentially */
    conn_closed,     /**< connection is closed */
    conn_max_state   /**< Max state value (used for assertion) */
};

函数命名 全小写,单词之间"_"分割。如"split_cmdline_strerror()"

注释

所有注释使用"/*这里是注释 */ "

其他

上一篇下一篇

猜你喜欢

热点阅读