Algorithm introduction recursion sort dynamic programming brute force BFS DFS dijkstra deterministic Algorithm geometric NP-C KNN simulation andothers