[varStore.optimize] Simplify algorithm
Produces better results even.
This commit is contained in:
parent
47ec18f788
commit
da305615d0
@ -545,9 +545,7 @@ def VarStore_optimize(self, use_NO_VARIATION_INDEX=True, quantization=1):
|
|||||||
#
|
#
|
||||||
# Algorithm:
|
# Algorithm:
|
||||||
#
|
#
|
||||||
# - For any encoding that has zero gain, encode it as is and put
|
# - Put all encodings into a "todo" list.
|
||||||
# it in the "done" list. Put the remaining encodings into the
|
|
||||||
# "todo" list.
|
|
||||||
#
|
#
|
||||||
# - For each encoding in the todo list, find the encoding in the
|
# - For each encoding in the todo list, find the encoding in the
|
||||||
# done list that has the highest gain when merged into it; call
|
# done list that has the highest gain when merged into it; call
|
||||||
@ -611,22 +609,12 @@ def VarStore_optimize(self, use_NO_VARIATION_INDEX=True, quantization=1):
|
|||||||
encodings.add_row(row)
|
encodings.add_row(row)
|
||||||
front_mapping[(major << 16) + minor] = row
|
front_mapping[(major << 16) + minor] = row
|
||||||
|
|
||||||
# Separate encodings that have no gain (are decided) and those having
|
# Prepare for the main algorithm.
|
||||||
# possible gain (possibly to be merged into others.)
|
|
||||||
encodings = sorted(encodings.values(), key=_Encoding.__len__, reverse=True)
|
|
||||||
done_by_width = defaultdict(list)
|
done_by_width = defaultdict(list)
|
||||||
todo = []
|
todo = sorted(encodings.values(), key=_Encoding.gain_sort_key)
|
||||||
for encoding in encodings:
|
del encodings
|
||||||
if not encoding.gain:
|
|
||||||
done_by_width[encoding.width].append(encoding)
|
|
||||||
else:
|
|
||||||
todo.append(encoding)
|
|
||||||
|
|
||||||
# For each encoding that is possibly to be merged, find the best match
|
|
||||||
# in the decided encodings, and record that.
|
|
||||||
todo.sort(key=_Encoding.gain_sort_key)
|
|
||||||
for encoding in todo:
|
for encoding in todo:
|
||||||
encoding._find_yourself_best_new_encoding(done_by_width)
|
encoding._find_yourself_best_new_encoding(done_by_width) # Just to set best_new_encoding
|
||||||
|
|
||||||
# Walk through todo encodings, for each, see if merging it with
|
# Walk through todo encodings, for each, see if merging it with
|
||||||
# another todo encoding gains more than each of them merging with
|
# another todo encoding gains more than each of them merging with
|
||||||
|
Loading…
x
Reference in New Issue
Block a user