https://wiki.haskell.org/api.php?action=feedcontributions&user=WarDaft&feedformat=atomHaskellWiki - User contributions [en]2024-03-28T23:22:04ZUser contributionsMediaWiki 1.35.5https://wiki.haskell.org/index.php?title=Talk:Tying_the_Knot&diff=45220Talk:Tying the Knot2012-04-11T17:25:59Z<p>WarDaft: Alternate example</p>
<hr />
<div>There's a conceptually much simpler way build a circular structure, though it has a substantial performance overhead (n^2) the first time you run through the nodes:<br />
<br />
mkDLList list = head result where<br />
(result, n) = (zipWith mknode list [0..], length list)<br />
mknode x i = DLList (result !! ((i - 1) `mod` n) ) x (result !! (i + 1 `mod` n) )<br />
<br />
Since we already have the result - the list of all the relevant nodes - we just simply point to the items at the right points on the list. When we do it this way, it's obvious what is going on from just a basic understanding of laziness, then we see a huge waste of operations in the repeat list traversing, and look for some way to make it O(n). The trick, of course, being tying the knot.<br />
<br />
With a slight tweak, this also serves as a simple method for defining arbitrary graphs, which is best given a different sort of optimization.<br />
<br />
[[User:WarDaft|WarDaft]] 17:25, 11 April 2012 (UTC)</div>WarDaft