<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[cesc]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jiangyi711</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jiangyi711]]></copyright><item><title><![CDATA[建了一个新博客]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/6220716</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/6220716</guid><author>jiangyi711</author><pubDate>Thu, 03 Mar 2011 14:52:00 +0800</pubDate><description><![CDATA[<br />请移步至：jiangyiblog.net]]></description><category></category></item><item><title><![CDATA[建了一个新博客]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/6220715</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/6220715</guid><author>jiangyi711</author><pubDate>Thu, 03 Mar 2011 14:52:00 +0800</pubDate><description><![CDATA[<br />请移步至：jiangyiblog.net]]></description><category></category></item><item><title><![CDATA[非递归遍历二叉树]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5958814</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5958814</guid><author>jiangyi711</author><pubDate>Fri, 22 Oct 2010 13:50:00 +0800</pubDate><description><![CDATA[<br />//
// 非递归中序遍历二叉树
//
void InOrder(struct Node* root)
{
	if (root == NULL) return;
	
	struct Node *t = root;
	stack<struct Node*> s;
	
	while (t != NULL || !s.empty())
	{
		while (t != NULL)
		{
			s.push(t);                // 压栈
			t = ]]></description><category></category></item><item><title><![CDATA[STL 中几个简单的数值算法实现]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5932263</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5932263</guid><author>jiangyi711</author><pubDate>Sun, 10 Oct 2010 23:50:00 +0800</pubDate><description><![CDATA[复习《STL源码剖析》，先把几个简单的算法自己实现一下。参数没有用迭代器，直接用整型数组。#include 
#include 

/*
  应用于有序区间，判断 b 中的元素是否全部被 a 包含。默认为升序，如果为降序，改变比较符号即可
*/
bool includes(int* a, size_t al, int *b, size_t bl)
{
	size_t i = 0, j = 0;
	
	while (i  b[j])
			return false;
		else if]]></description><category></category></item><item><title><![CDATA[STL中的内存分配器]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5930824</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5930824</guid><author>jiangyi711</author><pubDate>Sun, 10 Oct 2010 01:12:00 +0800</pubDate><description><![CDATA[题记：内存管理一直是C/C++程序的红灯区。关于内存管理的话题，大致有两类侧重点，一类是内存的正确使用，例如C++中new和delete应该成对出现，用RAII技巧管理内存资源，auto_ptr等方面，很多C/C++书籍中都使用技巧的介绍。另一类是内存管理的实现，如linux内核的slab分配器，STL中的allocator实现，以及一些特定于某种对象的内存管理等。最近阅读了一些内存管理实现方面的资料和源码，整理了一下，汇编成一个系列介绍一些常用的内存管理策略。1. STL容器简介STL提供了很多泛型容器，]]></description><category></category></item><item><title><![CDATA[利用归并排序求数列中逆序对个数]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5926179</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5926179</guid><author>jiangyi711</author><pubDate>Fri, 08 Oct 2010 01:31:00 +0800</pubDate><description><![CDATA[参考了这篇文章：http://blog.youkuaiyun.com/MapReduce/archive/2007/05/20/1618515.aspx以前自己写的归并排序比较累赘，文章中的代码更有条理，而且计算逆序对个数只需要一行代码，是否对原数列进行排序也只需要决定是否取舍一行代码。#include 
#include 

int ans;

void copy(int a[], int b[], int l, int r)
{
	int i = l;
	while (i ]]></description><category></category></item><item><title><![CDATA[POJ 2485 : 最小生成树（kruskal+并查集）]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5926154</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5926154</guid><author>jiangyi711</author><pubDate>Fri, 08 Oct 2010 00:38:00 +0800</pubDate><description><![CDATA[Description

The island nation of Flatopia is perfectly flat. Unfortunately, Flatopia has no public highways. So the traffic is difficult in Flatopia. The Flatopian government is aware of this problem. They're planning to build some highways so that it w]]></description><category></category></item><item><title><![CDATA[几个集合算法]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5925847</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5925847</guid><author>jiangyi711</author><pubDate>Thu, 07 Oct 2010 21:55:00 +0800</pubDate><description><![CDATA[上有相应的详细算法，我这里只写出了适用于普通指针的算法，思路和书上的一样。1. 交集void set_intersection(int a[], size_t al, int b[], size_t bl)
{
	size_t i = 0, j = 0;
	while (i  b[j])
			j++;
		else
		{
			printf("%d ", a[i]);
			i++, j++;
		}
	}
	printf("/n");
}]]></description><category></category></item><item><title><![CDATA[POJ 1258 : 最小生成树（Prim）]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5923627</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5923627</guid><author>jiangyi711</author><pubDate>Wed, 06 Oct 2010 13:23:00 +0800</pubDate><description><![CDATA[DescriptionFarmer John has been elected mayor of his town! One of his campaign promises was to bring internet connectivity to all farms in the area. He needs your help, of course. Farmer John ordered a high speed connection for his farm and is going to sha]]></description><category></category></item><item><title><![CDATA[最小生成树算法 ：Prim算法 和 Kruskal 算法]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5922653</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5922653</guid><author>jiangyi711</author><pubDate>Tue, 05 Oct 2010 17:30:00 +0800</pubDate><description><![CDATA[加权无向图G的生成树的代价是该生成树的所有边的代价之和。下面两个算法都采用了贪心策略。Kruskal算法描述：设T是构造的最小生成树，初始为空。每次从图中选择一条权值最小的边，如果该边不能与T中已有的边形成环。则将该边加入T。如此循环直到T中含有N-1条边为止。N为节点个数。伪代码如下：T = ∅
while (T中的边少于N-1条 & E不为空)
{
    从E中选择一条代价最小的边e;
    从E中删除e;
    if ( e 不会在T中形成环路 )
       将e加入T;
  ]]></description><category></category></item><item><title><![CDATA[单源最短路径 ：Dijkstra 算法]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5922629</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5922629</guid><author>jiangyi711</author><pubDate>Tue, 05 Oct 2010 17:09:00 +0800</pubDate><description><![CDATA[Dijkstra 算法用于解决有向图的最短路径问题。算法描述如下：1. 初始化原点的距离为0，到其他任意点到原点的距离为无穷大。2. 初始化已访问节点集合为空，未访问节点集合为所有节点。3. 在未访问节点集合中找到一个到已访问节点集合距离最近的节点（第一次找到的节点为原点），将该节点加入已访问节点。4. 更新该节点的邻居节点中处于未访问状态的节点的距离。5. 重复第三步。直到所有节点都已经访问。下面是一个最基本的Dijkstra 算法的c++实现，有向图存储采用的是邻接矩阵。const int MAXN =]]></description><category></category></item><item><title><![CDATA[Range Minimum Query (RMQ)]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5920409</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5920409</guid><author>jiangyi711</author><pubDate>Mon, 04 Oct 2010 00:44:00 +0800</pubDate><description><![CDATA[解法一：Sparse Table (ST) algorithm对2k 的长度的子数组进行动态规划。我们将使用数组M[0, N-1][0, logN]进行保存，其中M[i][j]是以i 开始，长度为 2j的子数组的最小值的索引。一旦我们预处理了这些值，让我们看看怎样使用它们去计算RMQA(i, j)。思路是选择两个能够完全覆盖区间[i..j]的块并且找到它们之间的最小值。设k = [log(j - i + 1)].。为了计算RMQA(i, j) 我们可以使用下面的公式这个算法的总的时间复杂度为 const i]]></description><category></category></item><item><title><![CDATA[Trend Micro 2011 笔试题]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5917812</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5917812</guid><author>jiangyi711</author><pubDate>Fri, 01 Oct 2010 14:13:00 +0800</pubDate><description><![CDATA[求一个字符串的最长不重复子串长度。如 "abcdefgd"的最长不重复子串为"abcdefg"，长度为7。在做题的时候没带草稿纸，导致试卷上有很多涂改，而且还忘记处理字符串结尾部分。#include 
#include 
#include 

using namespace std;

int search(char* str, int len)
{
	map m;

	if (len (str[p1], p1));

	while (p2 second;

			if (p2 ]]></description><category></category></item><item><title><![CDATA[KMP算法]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5914633</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5914633</guid><author>jiangyi711</author><pubDate>Wed, 29 Sep 2010 16:56:00 +0800</pubDate><description><![CDATA[根据matrix67博客上的思路，自己实现的kmp算法，字符串下标从0开始。#include 
#include 
const int MAXN = 1000;
int P[MAXN];
void pre(const char* B)
{
	P[0] = -1;
	
	int i, j = -1;
	for (i = 1; i  -1 && B[j+1] != B[i])
			j = P[j];
		if (B[j+1] == B[i])
			j++;
		P[i] = j;]]></description><category></category></item><item><title><![CDATA[C++ Traits]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5908720</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5908720</guid><author>jiangyi711</author><pubDate>Mon, 27 Sep 2010 02:15:00 +0800</pubDate><description><![CDATA[int * p;
....
int i = Foo(p); 今天看"modern c++ design"的时候发现自己竟然又把以前好不容易弄懂的Traits技术给忘记了，真是...又重新学习了一下，赶紧记下来。Traits技术可以用来获得一个 类型 的相关信息的。 首先假如有以下一个泛型的迭代器类，其中类型参数 T 为迭代器所指向的类型：template 
class myIterator
{
 ...
};当我们使用myIterator时，怎样才能获知它所指向的元素的类型呢？我们可以为这个类加]]></description><category></category></item><item><title><![CDATA[placement new]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5908701</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5908701</guid><author>jiangyi711</author><pubDate>Mon, 27 Sep 2010 01:42:00 +0800</pubDate><description><![CDATA[#include placement new。和其他普通的new不同的是，它在括号里多了另外一个参数。比如：Widget * p = new Widget;       //ordinary new
pi = new (ptr) int;            //placement new
括号里的参数是一个指针，它指向一个内存缓冲器，placement new将在这个缓冲器上分配一个对象。Placement new的返回值是这个被构造对象的地址(比如扣号中的传递参数)。placement new主要]]></description><category></category></item><item><title><![CDATA[POJ 3278 : 经典BFS]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5889785</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5889785</guid><author>jiangyi711</author><pubDate>Fri, 17 Sep 2010 01:24:00 +0800</pubDate><description><![CDATA[Catch That CowTime Limit: 2000MSMemory Limit: 65536KTotal Submissions: 8341Accepted: 2476DescriptionFarmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number lin]]></description><category></category></item><item><title><![CDATA[linux内核sk_buff的结构分析]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5869823</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5869823</guid><author>jiangyi711</author><pubDate>Wed, 08 Sep 2010 01:54:00 +0800</pubDate><description><![CDATA[转载自：http://simohayha.javaeye.com/blog/556168我看的内核版本是2.6.32. 在内核中sk_buff表示一个网络数据包，它是一个双向链表，而链表头就是sk_buff_head。在老的内核里面sk_buff会有一个list域直接指向sk_buff_head也就是链表头，现在在2.6.32里面这个域已经被删除了。 而sk_buff的内存布局可以分作3个段，第一个就是sk_buff自身，第二个是linear-data buff,第三个是paged-data buff（也就]]></description><category></category></item><item><title><![CDATA[微软，Google面试题 (32) —— O(1)时间删除节点]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5837858</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5837858</guid><author>jiangyi711</author><pubDate>Wed, 25 Aug 2010 16:02:00 +0800</pubDate><description><![CDATA[Google面试题：给定链表的头指针和一个结点指针，在O(1)时间删除该结点。解法一：将该节点的next的value复制给该节点，删除next。如果给出的节点为最后一个节点，则必须遍历链表。平均复杂度为O(1)。]]></description><category></category></item><item><title><![CDATA[微软，Google面试题 (31) —— 从尾到头输出链表]]></title><link>https://blog.youkuaiyun.com/jiangyi711/article/details/5837830</link><guid>https://blog.youkuaiyun.com/jiangyi711/article/details/5837830</guid><author>jiangyi711</author><pubDate>Wed, 25 Aug 2010 15:57:00 +0800</pubDate><description><![CDATA[题目：输入一个链表的头结点，从尾到头反过来输出每个结点的值。链表结点定义如下：struct ListNode
{
      int       m_nKey;
      ListNode* m_pNext;
};解法一：从头遍历链表，把每个节点的值push到一个栈中。解法二：递归思想。递归输出next节点，然后输出自己节点的value。让next为NULL，递归return。]]></description><category></category></item></channel></rss>