zmalloc.h / zmalloc.c Redis源代码中关于内存管理相关的函数定义于zmalloc.c文件中,主要函数罗列如下。这里对malloc/free等相关函数的实现进行分析。 参考:博客园 void *zmalloc(size_t size); void *zcalloc(size_t size); void *zrealloc(void *ptr, size_t size...
Redis源码笔记-Linux 环境下自定义的宏定义
Linux环境下Redis源代码中的宏定义 Redis源代码中借助自定义宏定义完成了许多程序分支的分离,在开发的Linux环境下列举出当前环境下自定义的宏定义,以供分析时查询。Linux环境下主要用gcc编译,因此借助gcc -dM -E - < /dev/null命令获得相应的变量,大部分的自定义定义在config.h中定义。 #include <linux/version....
最长回文子串和最长回文子序列
最长回文子串与最长回文子序列 如果某个序列有如下性质: X = {x1, x2, x3, ..., xn}, 满足x1 < x2 < x3 < ... < xn, 即xi < xi+1 (0 <= i <= n-1) 这个序列就称之为上升(递增)序列。类似地,如果此序列并不是完全升序,即满足x1 <= x2 <= ...
最长上升子序列(Longest Increasing Subsequence)
最长上升子序列与最长不下降子序列 如果某个序列有如下性质: X = {x1, x2, x3, ..., xn}, 满足x1 < x2 < x3 < ... < xn, 即xi < xi+1 (0 <= i <= n-1) 这个序列就称之为上升(递增)序列。类似地,如果此序列并不是完全升序,即满足x1 <= x2 <...
背包问题(Knapsack Problem)
背包问题 背包问题是一类经典的动态规划问题,也存在几种变形,不同的变形可以采用的方法也略有差别,比如分数背包问题可以采用贪心算法,而0-1背包问题只能采用动态规划的方法。 背包问题基本描述:给定一组N个物品(1 <= ii <= N),每种物品都有自己的重量w[ii]和价值v[ii],在限定的总重量W内,我们如何选择才能使所得物品的总价值最高。 经典的背包问题有两种:...
动态规划(Dynamic Programming)和贪心算法(Greedy Algorithm)
动态规划(Dynamic Programming)和贪心算法(Greedy Algorithm)都常用来解决最优化问题(Optimization problem),这类问题有许多可行解,每个解都有一个值,希望寻找具有最优值的解,此解往往是一个最优解,而不是最优解,因为可能有多个解都能使问题达到最优值。 动态规划和贪心算法在求解过程上有区别,但也有联系,比如求解的问题都要满足最优子结构(...
1013 Battle Over Cities (25point(s)) (dfs, 无向图连通分量)
问题描述 It is vitally important to have all the cities connected by highways in a war. If a city is occupied by the enemy, all the highways from/toward that city are closed. We must know immediately ...
1003 Emergency (25point(s)) (Dijsktra, Bellman-Ford, SPFA)
问题描述 As an emergency rescue team leader of a city, you are given a special map of your country. The map shows several scattered cities connected by some roads. Amount of rescue teams in each city ...
STL 容器erase() 方法与迭代器失效问题
前言 对于C++ STL容器,当向容器中添加元素或从容器中删除元素时,要特别注意迭代器失效问题。 一个失效的迭代器将不再表示任何元素。使用失效的迭代器将产生严重的错误,可类比未初始化的指针。 实例代码 举例说明:将关联容器map<int, int>poly 中value为0对应的的pair<key, value>从关联容器中删除。 很容易想到的写法:...