File tree Expand file tree Collapse file tree 1 file changed +25
-2
lines changed
Expand file tree Collapse file tree 1 file changed +25
-2
lines changed Original file line number Diff line number Diff line change @@ -510,8 +510,23 @@ def measure(p):
510510 p .longest_chain += max ([measure (pc ) for pc in p .children ])
511511 return p .longest_chain
512512
513+ def measure_iterative (root ):
514+ stack = [(root , False )]
515+ while stack :
516+ node , visited = stack .pop ()
517+ if not visited :
518+ stack .append ((node , True ))
519+ for child in node .children :
520+ stack .append ((child , False ))
521+ else :
522+ if node .children :
523+ node .longest_chain = 1 + max (child .longest_chain for child in node .children )
524+ else :
525+ node .longest_chain = 1
526+ return root .longest_chain
527+
513528 for page in root_pages :
514- measure (page )
529+ measure_iterative (page )
515530
516531 # Recursively sort branches by length
517532 def sort_seq (p ):
@@ -520,8 +535,16 @@ def sort_seq(p):
520535 for pc in p .children :
521536 sort_seq (pc )
522537
538+ def sort_seq_iterative (root ):
539+ stack = [root ]
540+ while stack :
541+ node = stack .pop ()
542+ if len (node .children ) > 1 :
543+ node .children = sorted (node .children , key = lambda x : x .longest_chain , reverse = True )
544+ stack .extend (node .children )
545+
523546 for page in root_pages :
524- sort_seq (page )
547+ sort_seq_iterative (page )
525548
526549 # Process roots in order of increasing age
527550 root_pages = sorted (root_pages , key = lambda x : x .access_serial )
You can’t perform that action at this time.
0 commit comments