algorithm - Merging sorted lists without comparison key -
say have following lists:
list 1: x, y, z list 2: w, x list 3: u
and want merge them such order among each individual list respected. solution above problem might w, x, y, z, u
.
this problem easy if have comparison key (e.g. string comparison; < z), gives reference element's position relative other elements in combined list. case when don't have key? above problem, restate problem follows:
x < y , y < z , w < x x, y, z, w, u in {0, 1, 2, 3, 4}
the way i'm solving type of problem model problem constraint satisfaction problem -- run ac3 arc consistency algorithm eliminate inconsistent values, , run recursive backtracking algorithm make assignments. works fine, seems overkill.
is there general algorithm or simpler approach confront type of problem?
construct graph node every letter in lists.
x y z w u
add directed edge letter x letter y every pair of consecutive letters in list.
x -> y -> z ^ | w u
topologically sort graph nodes obtain final list satisfies constraints.
if there ever cycle in graph, topological sorting algorithm detect cycle, revealing contradiction in constraints induced original lists.
Comments
Post a Comment