Need algorithm for Sequence calculation
I am trying to find the solution for a problem where i have something like
- A > B
- B > C
- B > D
- C > D
And I should get the answer as A > B > C > D.
Conditions for this problem
- The output will in开发者_JS百科volve all the elements.
- The problem will not have any bogus inputs. for example, (A>B) (C>D) is a bogus input, since we cannot determine the output.
- The inputs can be of any size but never bogus and there will always be a solution to the problem.
I need to find a solution for this optimally using Java Collections. Any tips/hints are welcome.
Thanks in advance!
It's called a Topological Sort. http://en.wikipedia.org/wiki/Topological_sorting
Given that, you should be able to complete your homework on your own.
I'm betting you recently covered graphs in this class...
How do you think a graph could be applied here ?
Can you think of a structure which one would build on the basis of the problem inputs (A>B>, A>D, C>A etc.)? Maybe some kind of directed graph...
Once the problem is expressed in such a graph, the solution would involve navigating this graph...
You start putting them in a List
. The list will be sorted, so for the n
th pair (a, b)
, you look up a
, using a binary search. If it exists already skip, if not you insert in at proper point. Since a > b
, you do that again with b
in the remaining part of the List. Hope this help.
You can do this with a Map of the inputs and a recursive method that adds it's answer to a returned List (or just prints each node as it descends the tree.) If you are returning the answer then pre-pending to the returned list will prevent the answer from being reversed D->C->B->A when complete (or you can just .reverse() the list at the end.) Don't forget to test for a break condition when recursing. (hint: key not found)
精彩评论