<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[通往梦想]]></title><description><![CDATA[Algorithm, Data Structure and Logic]]></description><link>https://blog.youkuaiyun.com/violet_program</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; violet_program]]></copyright><item><title><![CDATA[Lock on Static and non-static Methods]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/25958465</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/25958465</guid><author>violet_program</author><pubDate>Fri, 16 May 2014 10:20:35 +0800</pubDate><description><![CDATA[问题Synchronized 关键字分别用在静态和非静态函数上,

其他setting相同, 多线程各自调用1000次, 哪个更快些?]]></description><category></category></item><item><title><![CDATA[String Match & Observer & Decorator & A* Search Algorithm & RW Lock]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/21708871</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/21708871</guid><author>violet_program</author><pubDate>Fri, 21 Mar 2014 14:34:13 +0800</pubDate><description><![CDATA[String Match
Rabin-Karp
原理很简单，就是计算出pattern的hash值，然后截取text里面的substring，计算hash值。一般O(m+n)。n是text长度，m是pattern长度。但是worst case是O(mn)。当有多个pattern的时候比较好用，因为一个hashtable可以存多个hash值，一起挨个比较。该方法多用于判断抄袭。
Aho-Cora]]></description><category></category></item><item><title><![CDATA[Java 知识点补充]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/20532199</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/20532199</guid><author>violet_program</author><pubDate>Sat, 15 Mar 2014 03:41:11 +0800</pubDate><description><![CDATA[thread and thread pool
super()
this() in constructor
static block
ListIterator
Implementation of Map interface
HashMap
Hashtable
TreeMap
EnumMap
Implementation of Set interface
HashSet
Tre]]></description><category></category></item><item><title><![CDATA[Java代码的执行顺序]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/21256985</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/21256985</guid><author>violet_program</author><pubDate>Fri, 14 Mar 2014 22:41:21 +0800</pubDate><description><![CDATA[转载自http://java-mzd.iteye.com/blog/838683

本文主要介绍以下两块内容的执行顺序，熟悉的大虾可以直接飘过。

     一。JAVA中执行顺序

静态块块构造器父类构造器

    二。JAVA中赋值顺序

      静态块直接赋值      块直接赋值      父类继承的属性已赋值      静态变量声明时赋值      成员变量声明]]></description><category></category></item><item><title><![CDATA[[Leetcode] Reverse Words in a String]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/21207229</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/21207229</guid><author>violet_program</author><pubDate>Fri, 14 Mar 2014 01:58:41 +0800</pubDate><description><![CDATA[Given an input string, reverse the string word by word.

For example,
Given s = "the sky is blue",
return "blue is sky the".

click to show clarification.

Clarification:


What constitutes]]></description><category></category></item><item><title><![CDATA[[Random Coding] De/Serialization of Binary Search Tree]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/20758829</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/20758829</guid><author>violet_program</author><pubDate>Sat, 08 Mar 2014 05:55:40 +0800</pubDate><description><![CDATA[package RandomPractice;

import java.util.ArrayList;

import util.BTNode;

public class DeSerializationBinarySearchTree {
	public static void serialize(BTNode root, ArrayList list){
		if(root == null)]]></description><category></category></item><item><title><![CDATA[[Random Coding] De/Serialization Binary Tree]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/20758399</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/20758399</guid><author>violet_program</author><pubDate>Sat, 08 Mar 2014 05:48:30 +0800</pubDate><description><![CDATA[package RandomPractice;

import java.util.ArrayList;
import util.*;

public class DeSerializationBinaryTree {
	public static void serialize(BTNode root, ArrayList list){
		if(root == null)
			list.add]]></description><category></category></item><item><title><![CDATA[[Random Coding] Tree Iterator]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/20757953</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/20757953</guid><author>violet_program</author><pubDate>Sat, 08 Mar 2014 05:29:08 +0800</pubDate><description><![CDATA[package RandomPractice;

import java.util.NoSuchElementException;
import util.*;

public class TreeIterator {
	private BTNode next;
	public TreeIterator(BTNode root){
		next = root;
		if(next == null)]]></description><category></category></item><item><title><![CDATA[[RandomCoding]SameLeafNode]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/20757213</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/20757213</guid><author>violet_program</author><pubDate>Sat, 08 Mar 2014 05:04:03 +0800</pubDate><description><![CDATA[package RandomPractice;

import util.*;

public class SameLeafNode {
	public static boolean hasSameLeaf(BTNode root1, BTNode root2){
		if(root1 == null && root2 == null)
			return true;
		if(root1 == ]]></description><category></category></item><item><title><![CDATA[[Random Coding]Topological Sorting]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/19468619</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/19468619</guid><author>violet_program</author><pubDate>Wed, 19 Feb 2014 06:15:05 +0800</pubDate><description><![CDATA[To be continued.
package leetcode.blog;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;

public class TopoSort {]]></description><category></category></item><item><title><![CDATA[[Random Coding]StackWithMin]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/19466811</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/19466811</guid><author>violet_program</author><pubDate>Wed, 19 Feb 2014 05:39:11 +0800</pubDate><description><![CDATA[import java.util.Stack;

public class StackWithMin {
	Stack stack = new Stack();
	Stack min = new Stack();
	public void push(Integer val){
		stack.push(val);
		if(min.isEmpty() || val <= min.peek())]]></description><category></category></item><item><title><![CDATA[[Random Coding]QueueWithMin]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/19466775</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/19466775</guid><author>violet_program</author><pubDate>Wed, 19 Feb 2014 05:36:12 +0800</pubDate><description><![CDATA[import java.util.LinkedList;
import java.util.Queue;

public class QueueWithMin {
	Queue queue = new LinkedList();
	LinkedList min = new LinkedList();
	public void offer(Integer val){
		queue.offer(va]]></description><category></category></item><item><title><![CDATA[Decision Tree & Threaded Binary Tree & Information Entropy]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/19465339</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/19465339</guid><author>violet_program</author><pubDate>Wed, 19 Feb 2014 05:26:20 +0800</pubDate><description><![CDATA[Decision Tree
A tree-like graph or model of decisions and their possible consequences.


Threaded Binary Tree
如果right child是null pointer就指向inorder successor
如果left child是null pointer就指向inorder p]]></description><category></category></item><item><title><![CDATA[Reservoir Sampling & Quickselect]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/19452725</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/19452725</guid><author>violet_program</author><pubDate>Wed, 19 Feb 2014 04:53:56 +0800</pubDate><description><![CDATA[Reservoir Sampling
适用于从很大的数据堆里随机取样，一般适用于内存不足以装入所有数据的情况。


从n个数据里随机取k个数
1. 用前k个数据组成一个reservoir
2. 从k+1开始，对于第i个元素，随机产生一个1~i之间的数j，如果j


证明tips
每次循环，reservoir里第j个（j


Quickselect
O(n)，每次都去掉一]]></description><category></category></item><item><title><![CDATA[置顶]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/18756263</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/18756263</guid><author>violet_program</author><pubDate>Sat, 25 Jan 2014 04:10:22 +0800</pubDate><description><![CDATA[写这个主要是为了储存自己的学习练习的东西，方便查找，也是一个很好的备份。]]></description><category></category></item><item><title><![CDATA[Leetcode Blog Post Algorithms]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/18438495</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/18438495</guid><author>violet_program</author><pubDate>Sat, 18 Jan 2014 04:52:19 +0800</pubDate><description><![CDATA[package leetcode.blog;

import java.util.ArrayList;
import java.util.Arrays;

public class LeetcodeBlog {
	// Q1 Find Intersection of two Sorted Arrays
	// if either A or B 's length is too big, try t]]></description><category></category></item><item><title><![CDATA[知识点总结2 External Sorting, Bucket Sorting, and Radix Sorting]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/18116967</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/18116967</guid><author>violet_program</author><pubDate>Sat, 11 Jan 2014 04:00:19 +0800</pubDate><description><![CDATA[External Sorting
Usage: Sort huge data with limited memory space.
Main idea: Divide (in order to fit in the main memory), thenmerge together.
One example from Wiki:
Sort 900 MB data with 100 MB RA]]></description><category></category></item><item><title><![CDATA[一些知识点总结（HeapSort, MergeSort, QuickSort, PrefixTree, TopologicalSort）]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/17726155</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/17726155</guid><author>violet_program</author><pubDate>Wed, 01 Jan 2014 02:37:18 +0800</pubDate><description><![CDATA[HeapSort
package RandomPractice;

public class HeapSort {
	public static int heapSize = 0;
	public static void buildHeap(int[] A){
		heapSize = A.length;
		for(int i = A.length / 2 - 1; i >= 0; i--)]]></description><category></category></item><item><title><![CDATA[Leetcode: Evaluate Reverse Polish Notation]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/17701921</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/17701921</guid><author>violet_program</author><pubDate>Tue, 31 Dec 2013 03:45:44 +0800</pubDate><description><![CDATA[Evaluate the value of an arithmetic expression in Reverse Polish Notation.

Valid operators are +, -, *, /.
 Each operand may be an integer or another expression.

Some examples:

  ["2", "1", ]]></description><category></category></item><item><title><![CDATA[Max Points on a Line]]></title><link>https://blog.youkuaiyun.com/violet_program/article/details/17701127</link><guid>https://blog.youkuaiyun.com/violet_program/article/details/17701127</guid><author>violet_program</author><pubDate>Tue, 31 Dec 2013 03:14:21 +0800</pubDate><description><![CDATA[Given n points on a 2D plane, find the maximum number of points that lie on the same straight line.
算斜率的时候一定注意要格式转换，integer-〉double
/**
 * Definition for a point.
 * class Point {
 *     int x;
 *]]></description><category></category></item></channel></rss>