https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Ukkonen%27s_algorithm Ukkonen's algorithm - Revision history 2025-06-28T14:06:43Z Revision history for this page on the wiki MediaWiki 1.45.0-wmf.7 https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1215741721&oldid=prev Teafed: /* High level description of Ukkonen's algorithm */ 2024-03-26T21:17:26Z <p><span class="autocomment">High level description of Ukkonen&#039;s algorithm</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 21:17, 26 March 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 6:</td> <td colspan="2" class="diff-lineno">Line 6:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==High level description of Ukkonen's algorithm==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==High level description of Ukkonen's algorithm==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>Ukkonen's algorithm constructs an implicit suffix tree T{{sub|i}} for each prefix S[1...i] of S (S being the string of length n). It first builds T{{sub|1}} using 1{{sup|st}} character, then T{{sub|2}} using 2{{sup|nd}} character, then T{{sub|3}} using 3{{sup|rd}} character, ..., T{{sub|n}} using the n{{sup|th}} character. You can find the following characteristics in a suffix tree that uses Ukkonen's algorithm:</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>Ukkonen's algorithm constructs an implicit suffix tree T{{sub|i}} for each prefix S[1...i] of S (S being the string of length n). It first builds T{{sub|1}} using<ins style="font-weight: bold; text-decoration: none;"> the</ins> 1{{sup|st}} character, then T{{sub|2}} using<ins style="font-weight: bold; text-decoration: none;"> the</ins> 2{{sup|nd}} character, then T{{sub|3}} using<ins style="font-weight: bold; text-decoration: none;"> the</ins> 3{{sup|rd}} character, ..., T{{sub|n}} using the n{{sup|th}} character. You can find the following characteristics in a suffix tree that uses Ukkonen's algorithm:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Implicit suffix tree T{{sub|i+1}} is built on top of implicit suffix tree T{{sub|i}} .</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* Implicit suffix tree T{{sub|i+1}} is built on top of implicit suffix tree T{{sub|i}} .</div></td> </tr> </table> Teafed https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1215735524&oldid=prev Teafed: /* Ukkonen's algorithm example */ 2024-03-26T20:34:22Z <p><span class="autocomment">Ukkonen&#039;s algorithm example</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 20:34, 26 March 2024</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 25:</td> <td colspan="2" class="diff-lineno">Line 25:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Ukkonen's algorithm example== </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Ukkonen's algorithm example== </div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[File:Suffix Tree using Ukkonen's Algorithm.jpg|thumb|Final suffix tree using Ukkonen's algorithm (example).]]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>[[File:Suffix Tree using Ukkonen's Algorithm.jpg|thumb|Final suffix tree using Ukkonen's algorithm (example).]]</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>To better illustrate how a suffix tree using Ukkonen's algorithm<del style="font-weight: bold; text-decoration: none;"> is constructed</del>, we can <del style="font-weight: bold; text-decoration: none;">use</del> the <del style="font-weight: bold; text-decoration: none;">following</del> <del style="font-weight: bold; text-decoration: none;">example:</del></div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>To better illustrate how a suffix tree<ins style="font-weight: bold; text-decoration: none;"> is constructed</ins> using Ukkonen's algorithm, we can <ins style="font-weight: bold; text-decoration: none;">consider</ins> the <ins style="font-weight: bold; text-decoration: none;">string &lt;code&gt;S =</ins> <ins style="font-weight: bold; text-decoration: none;">xabxac&lt;/code&gt;.</ins></div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><br /></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>S=xabxac</div></td> <td colspan="2" class="diff-empty diff-side-added"></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Start with an empty root node.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Start with an empty root node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct <del style="font-weight: bold; text-decoration: none;">T{{sub|1}}</del> for S[1] by adding the first character of the string. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;T_1&lt;/math&gt;</ins> for <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>S[1]<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> by adding the first character of the string. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct <del style="font-weight: bold; text-decoration: none;">T{{sub|2}}</del> for S[1<del style="font-weight: bold; text-decoration: none;">.</del>..2] by adding suffixes of xa (xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;T_2&lt;/math&gt;</ins> for <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>S[1..2]<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> by adding suffixes of <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xa<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> (<ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xa<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> and <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>a<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct <del style="font-weight: bold; text-decoration: none;">T{{sub|3}}</del> for S[1<del style="font-weight: bold; text-decoration: none;">.</del>..3] by adding suffixes of xab (xab, ab and b). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;T_3&lt;/math&gt;</ins> for <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>S[1..3]<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> by adding suffixes of <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xab<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> (<ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xab<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>ab<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> and <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>b<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct <del style="font-weight: bold; text-decoration: none;">T{{sub|4}}</del> for S[1<del style="font-weight: bold; text-decoration: none;">.</del>..4] by adding suffixes of xabx (xabx, abx, bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;T_4&lt;/math&gt;</ins> for <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>S[1..4]<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> by adding suffixes of <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xabx<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> (<ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xabx<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>abx<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>bx<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> and <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>x<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs <del style="font-weight: bold; text-decoration: none;">T{{sub|5}}</del> for S[1<del style="font-weight: bold; text-decoration: none;">.</del>..5] by adding suffixes of xabxa (xabxa, abxa, bxa, xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;T_5&lt;/math&gt;</ins> for <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>S[1..5]<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> by adding suffixes of <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xabxa<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> (<ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xabxa<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>abxa<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>bxa<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xa<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> and <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>a<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs <del style="font-weight: bold; text-decoration: none;">T{{sub|6}}</del> for S[1<del style="font-weight: bold; text-decoration: none;">.</del>..6] by adding suffixes of xabxac (xabxac, abxac, bxac, xac, ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new leaf edges and two new internal nodes are created).</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs <ins style="font-weight: bold; text-decoration: none;">&lt;math&gt;T_6&lt;/math&gt;</ins> for <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>S[1..6]<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> by adding suffixes of <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xabxac<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> (<ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xabxac<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>abxac<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>bxac<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>xac<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>, <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>ac<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins> and <ins style="font-weight: bold; text-decoration: none;">&lt;code&gt;</ins>c<ins style="font-weight: bold; text-decoration: none;">&lt;/code&gt;</ins>). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new leaf edges and two new internal nodes are created).</div></td> </tr> <tr> <td colspan="2" class="diff-empty diff-side-deleted"></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> </tr> </table> Teafed https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1171832607&oldid=prev 91.152.66.221: change lead edge to leaf edge (fix typo) 2023-08-23T12:48:09Z <p>change lead edge to leaf edge (fix typo)</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 12:48, 23 August 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 35:</td> <td colspan="2" class="diff-lineno">Line 35:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx (xabx, abx, bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx (xabx, abx, bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa (xabxa, abxa, bxa, xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa (xabxa, abxa, bxa, xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac (xabxac, abxac, bxac, xac, ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new <del style="font-weight: bold; text-decoration: none;">lead</del> edges and two new internal nodes are created).</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac (xabxac, abxac, bxac, xac, ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new <ins style="font-weight: bold; text-decoration: none;">leaf</ins> edges and two new internal nodes are created).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> </tr> </table> 91.152.66.221 https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1154987029&oldid=prev Frap: /* Run time */ 2023-05-15T23:37:22Z <p><span class="autocomment">Run time</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 23:37, 15 May 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 21:</td> <td colspan="2" class="diff-lineno">Line 21:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Run time==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Run time==</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>The naive implementation for generating a suffix tree going forward requires {{math|''O''(''n''&lt;sup&gt;2&lt;/sup&gt;)}} or even {{math|''O''(''n''&lt;sup&gt;3&lt;/sup&gt;)}} time complexity in [[big O notation]], where {{math|''n''}} is the length of the string. By exploiting a number of algorithmic techniques, Ukkonen reduced this to {{math|''O''(''n'')}} (linear) time, for constant-size alphabets, and {{math|''O''(''n'' log ''n'')}} in general, matching the runtime performance of the earlier two algorithms.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>The naive implementation for generating a suffix tree going forward requires {{math|''O''(''n''&lt;sup&gt;2&lt;/sup&gt;)}} or even {{math|''O''(''n''&lt;sup&gt;3&lt;/sup&gt;)}} time complexity in [[big O<ins style="font-weight: bold; text-decoration: none;"> notation|big ''O''</ins> notation]], where {{math|''n''}} is the length of the string. By exploiting a number of algorithmic techniques, Ukkonen reduced this to {{math|''O''(''n'')}} (linear) time, for constant-size alphabets, and {{math|''O''(''n'' log ''n'')}} in general, matching the runtime performance of the earlier two algorithms.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Ukkonen's algorithm example== </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Ukkonen's algorithm example== </div></td> </tr> </table> Frap https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1146952575&oldid=prev Trikekus: fix typo(?) 2023-03-27T23:30:03Z <p>fix typo(?)</p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 23:30, 27 March 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 24:</td> <td colspan="2" class="diff-lineno">Line 24:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Ukkonen's algorithm example== </div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Ukkonen's algorithm example== </div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>[[File:Suffix Tree using Ukkonen's Algorithm.jpg|thumb|Final suffix <del style="font-weight: bold; text-decoration: none;">treen</del> using Ukkonen's algorithm (example).]]</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>[[File:Suffix Tree using Ukkonen's Algorithm.jpg|thumb|Final suffix <ins style="font-weight: bold; text-decoration: none;">tree</ins> using Ukkonen's algorithm (example).]]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>To better illustrate how a suffix tree using Ukkonen's algorithm is constructed, we can use the following example:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>To better illustrate how a suffix tree using Ukkonen's algorithm is constructed, we can use the following example:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> Trikekus https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1145742081&oldid=prev 176.234.133.135: /* Ukkonen's algorithm example */ 2023-03-20T18:42:37Z <p><span class="autocomment">Ukkonen&#039;s algorithm example</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 18:42, 20 March 2023</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 34:</td> <td colspan="2" class="diff-lineno">Line 34:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|3}} for S[1...3] by adding suffixes of xab (xab, ab and b). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|3}} for S[1...3] by adding suffixes of xab (xab, ab and b). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx (xabx, abx, bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx (xabx, abx, bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa (xabxa, abxa, bxa, xa and <del style="font-weight: bold; text-decoration: none;">x</del>). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa (xabxa, abxa, bxa, xa and <ins style="font-weight: bold; text-decoration: none;">a</ins>). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac (xabxac, abxac, bxac, xac, ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new lead edges and two new internal nodes are created).</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac (xabxac, abxac, bxac, xac, ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new lead edges and two new internal nodes are created).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> </table> 176.234.133.135 https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1130267770&oldid=prev Loopology: /* External links */ 2022-12-29T10:40:33Z <p><span class="autocomment">External links</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 10:40, 29 December 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 42:</td> <td colspan="2" class="diff-lineno">Line 42:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==External links==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==External links==</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [https://stackoverflow.com/a/9513423/414272 Detailed explanation in plain English]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [https://stackoverflow.com/a/9513423/414272 Detailed explanation in plain English]</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>* [<del style="font-weight: bold; text-decoration: none;">http</del>://marknelson.us/1996/08/01/suffix-trees<del style="font-weight: bold; text-decoration: none;">/</del> Fast String Searching With Suffix Trees] Mark Nelson's tutorial. Has an implementation example written with C++.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>* [<ins style="font-weight: bold; text-decoration: none;">https</ins>://marknelson.us<ins style="font-weight: bold; text-decoration: none;">/posts</ins>/1996/08/01/suffix-trees<ins style="font-weight: bold; text-decoration: none;">.html</ins> Fast String Searching With Suffix Trees] Mark Nelson's tutorial. Has an implementation example written with C++.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://programmerspatch.blogspot.com.au/2013/02/ukkonens-suffix-tree-algorithm.html Implementation in C with detailed explanation]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [http://programmerspatch.blogspot.com.au/2013/02/ukkonens-suffix-tree-algorithm.html Implementation in C with detailed explanation]</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [https://www.cs.cmu.edu/~guyb/realworld/slidesF07/suffix.ppt Lecture slides by Guy Blelloch]</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>* [https://www.cs.cmu.edu/~guyb/realworld/slidesF07/suffix.ppt Lecture slides by Guy Blelloch]</div></td> </tr> </table> Loopology https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1092492022&oldid=prev Pelirodri1248: /* Ukkonen's algorithm example */ 2022-06-10T17:01:12Z <p><span class="autocomment">Ukkonen&#039;s algorithm example</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 17:01, 10 June 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 32:</td> <td colspan="2" class="diff-lineno">Line 32:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|1}} for S[1] by adding the first character of the string. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|1}} for S[1] by adding the first character of the string. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|2}} for S[1...2] by adding suffixes of xa (xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|2}} for S[1...2] by adding suffixes of xa (xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|3}} for S[1...3] by adding suffixes of xab (xab,ab and b). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|3}} for S[1...3] by adding suffixes of xab (xab,<ins style="font-weight: bold; text-decoration: none;"> </ins>ab and b). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx (xabx,abx,bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx (xabx,<ins style="font-weight: bold; text-decoration: none;"> </ins>abx,<ins style="font-weight: bold; text-decoration: none;"> </ins>bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa (xabxa,abxa,bxa,xa and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa (xabxa,<ins style="font-weight: bold; text-decoration: none;"> </ins>abxa,<ins style="font-weight: bold; text-decoration: none;"> </ins>bxa,<ins style="font-weight: bold; text-decoration: none;"> </ins>xa and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac (xabxac,abxac,bxac,xac,ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new lead edges and two new internal nodes are created).</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac (xabxac,<ins style="font-weight: bold; text-decoration: none;"> </ins>abxac,<ins style="font-weight: bold; text-decoration: none;"> </ins>bxac,<ins style="font-weight: bold; text-decoration: none;"> </ins>xac,<ins style="font-weight: bold; text-decoration: none;"> </ins>ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new lead edges and two new internal nodes are created).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> </tr> </table> Pelirodri1248 https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1092491964&oldid=prev Pelirodri1248: /* Ukkonen's algorithm example */ 2022-06-10T17:00:49Z <p><span class="autocomment">Ukkonen&#039;s algorithm example</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 17:00, 10 June 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 32:</td> <td colspan="2" class="diff-lineno">Line 32:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|1}} for S[1] by adding the first character of the string. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|1}} for S[1] by adding the first character of the string. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|2}} for S[1...2] by adding suffixes of xa (xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|2}} for S[1...2] by adding suffixes of xa (xa and a). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|3}} for S[1...3] by adding suffixes of xab(xab,ab and b). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|3}} for S[1...3] by adding suffixes of xab<ins style="font-weight: bold; text-decoration: none;"> </ins>(xab,ab and b). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx(xabx,abx,bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Construct T{{sub|4}} for S[1...4] by adding suffixes of xabx<ins style="font-weight: bold; text-decoration: none;"> </ins>(xabx,abx,bx and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa(xabxa,abxa,bxa,xa and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|5}} for S[1...5] by adding suffixes of xabxa<ins style="font-weight: bold; text-decoration: none;"> </ins>(xabxa,abxa,bxa,xa and x). Rule 1 applies, which extends the path label in existing leaf edge. Rule 3 applies, do nothing.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac(xabxac,abxac,bxac,xac,ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new lead edges and two new internal nodes are created).</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># Constructs T{{sub|6}} for S[1...6] by adding suffixes of xabxac<ins style="font-weight: bold; text-decoration: none;"> </ins>(xabxac,abxac,bxac,xac,ac and c). Rule 1 applies, which extends the path label in existing leaf edge. Rule 2 applies, which creates a new leaf node (in this case, three new lead edges and two new internal nodes are created).</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==References==</div></td> </tr> </table> Pelirodri1248 https://en.wikipedia.org/w/index.php?title=Ukkonen%27s_algorithm&diff=1092491781&oldid=prev Pelirodri1248: /* High level description of Ukkonen's algorithm */ 2022-06-10T16:59:24Z <p><span class="autocomment">High level description of Ukkonen&#039;s algorithm</span></p> <table style="background-color: #fff; color: #202122;" data-mw="interface"> <col class="diff-marker" /> <col class="diff-content" /> <col class="diff-marker" /> <col class="diff-content" /> <tr class="diff-title" lang="en"> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">← Previous revision</td> <td colspan="2" style="background-color: #fff; color: #202122; text-align: center;">Revision as of 16:59, 10 June 2022</td> </tr><tr> <td colspan="2" class="diff-lineno">Line 15:</td> <td colspan="2" class="diff-lineno">Line 15:</td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Suffix extension is all about adding the next character into the suffix tree built so far. In extension j of phase i+1, algorithm finds the end of S[j...i] (which is already in the tree due to previous phase i) and then it extends S[j...i] to be sure the suffix S[j...i+1] is in the tree. There are three extension rules:</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>Suffix extension is all about adding the next character into the suffix tree built so far. In extension j of phase i+1, algorithm finds the end of S[j...i] (which is already in the tree due to previous phase i) and then it extends S[j...i] to be sure the suffix S[j...i+1] is in the tree. There are three extension rules:</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># If the path from the root labelled S[j...i] ends at a leaf edge (i.e., S[i] is last character on leaf edge) then character S[i+1] is just added to the end of the label on that leaf edge.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># If the path from the root labelled S[j...i] ends at a leaf edge (i.e., S[i] is last character on leaf edge)<ins style="font-weight: bold; text-decoration: none;">,</ins> then character S[i+1] is just added to the end of the label on that leaf edge.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># if the path from the root labelled S[j...i] ends at non-leaf edge (i.e., there are more characters after S[i] on path) and next character is not S[i+1], then a new leaf edge with label S[i+1] and number j is created starting from character S[i+1]. A new internal node will also be created if S[1...i] ends inside (in<del style="font-weight: bold; text-decoration: none;">-</del>between) a non-leaf edge.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># if the path from the root labelled S[j...i] ends at<ins style="font-weight: bold; text-decoration: none;"> a</ins> non-leaf edge (i.e., there are more characters after S[i] on path) and next character is not S[i+1], then a new leaf edge with label S[i+1] and number j is created starting from character S[i+1]. A new internal node will also be created if S[1...i] ends inside (in<ins style="font-weight: bold; text-decoration: none;"> </ins>between) a non-leaf edge.</div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div># If the path from the root labelled S[j..i] ends at non-leaf edge (i.e., there are more characters after S[i] on path) and next character is <del style="font-weight: bold; text-decoration: none;">s</del>[i+1] (already in tree), do nothing. </div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div># If the path from the root labelled S[j..i] ends at<ins style="font-weight: bold; text-decoration: none;"> a</ins> non-leaf edge (i.e., there are more characters after S[i] on path) and next character is <ins style="font-weight: bold; text-decoration: none;">S</ins>[i+1] (already in tree), do nothing. </div></td> </tr> <tr> <td class="diff-marker" data-marker="−"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;"><div>One important point to note is that from a given node (root or internal), there will be one and only one edge starting from one character. There will not be more than one <del style="font-weight: bold; text-decoration: none;">edges</del> going out of any node<del style="font-weight: bold; text-decoration: none;">,</del> starting with same character.</div></td> <td class="diff-marker" data-marker="+"></td> <td style="color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div>One important point to note is that from a given node (root or internal), there will be one and only one edge starting from one character. There will not be more than one <ins style="font-weight: bold; text-decoration: none;">edge</ins> going out of any node starting with<ins style="font-weight: bold; text-decoration: none;"> the</ins> same character.</div></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><br /></td> </tr> <tr> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Run time==</div></td> <td class="diff-marker"></td> <td style="background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div>==Run time==</div></td> </tr> </table> Pelirodri1248