major refactor on greedy algorithm. Chopping down code to greedy is a single self contained method and can delete update and find_nearest