some data struct and algorithm for test or learn