1 / 8

Synthesis with the Sketch System

Synthesis with the Sketch System. Day 3. Armando Solar- Lezama. In place list reversal. Problem statement. Given a list like this: Produce a list like this :. head. head. Constraints . Your algorithm must be O(n) Your algorithm must use a constant space

ehren
Download Presentation

Synthesis with the Sketch System

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Synthesis with the Sketch System Day 3 Armando Solar-Lezama

  2. In place list reversal

  3. Problem statement • Given a list like this: • Produce a list like this: head . . . head . . .

  4. Constraints • Your algorithm must be O(n) • Your algorithm must use a constant space • It can not use arrays or recursion

  5. The Spec harness voidmain(int n){ if(n >= MAXN){ n = MAXN-1; } node[n] nodes = null; list l = newList(); popList(n, l, nodes); reverseSK(l); check(n, l, nodes); }

  6. The Spec voidpopList(int n, list l, refnode[n] nodes){ node tail= null; for(int i=0; i<n;++i){ node t = newNode(); if(i>0){ tail.next = t; }else{ l.head = t; } tail = t; nodes[i] = t; } }

  7. The Spec void check(int n, list l, node[n] nodes){ node cur = l.head; inti=0; while(cur != null){ assertcur == nodes[n-1-i]; cur = cur.next; i = i+1; } asserti == n; if(n > 0){ assertl.head == nodes[n-1]; }else{ assertl.head == null; } }

  8. The Sketch voidreverseSK(ref list l){ node tmp1 = null;node tmp2 = null; while( ){ } } {| (tmp1 | tmp2 | l.head)(.next)? |}

More Related