| C. Okasaki. The role of lazy evaluation in amortized data structures. In Proc. of the International Conference on Functional Programming, pages 62-72. ACM Press, 1996. |
....operations. Driscoll, Sleator, and Tarjan [9] coined the term con uently persistent for fully persistent structures that support such meld operations. Much work has been done on making speci c data structures such as catenable deques and catenable nger search trees con uently persistent (see [1, 9, 17, 16, 19, 21, 20, 15]) Despite these results no progress has been made on the problem of obtaining a general transformation that can make any pointer based data structure con uently persistent. School of computer science, Tel Aviv University, Tel Aviv 69978, ffiat,haimkg math.tau.ac.il x=1, y=2 x=6 x=3 x=6 ....
C. Okasaki. The role of lazy evaluation in amortized data structures. In Proc. of the International Conference on Functional Programming, pages 62-72. ACM Press, 1996.
....specification. For the purposes of specification, we treat a queue as a list. Queues Name Lazy Complexities of Operations Reference Naive head tail : O(1) snoc: O(n) n a Simple snoc head tail : O(1) z [20] Multihead snoc head tail : O(1) 20] Banker s X snoc head tail : O(1) y [37] Physicist s X snoc head tail : O(1) y [38] Real time X snoc head tail : O(1) 34] Bootstrapped X snoc head tail : O(1) y [38] Implicit X snoc head tail : O(1) y [38] Table 2.1: Complexities of implementations of queues, including whether lazy evaluation is required. Complexities marked ....
....simulated. Full details are given in [20] Note that there are two mistakes in the code given in [20] ffl The call cons[v,T] on line 4 should read cons[v,T ] ffl The value lendiff 1 on line 9 should read lendiff. Appendix A gives the corrected implementation. 2.1. 4 Banker s Queues Okasaki [37] presents an implementation of queues with O(1) amortized complexity. He is able to give an amortized complexity in a persistent setting by appealing to the proof techniques that he develops in [32, 37] and presents in [38] Representing a queue as a pair of lists is once again the basis of the ....
[Article contains additional citation context not shown here]
Chris Okasaki. The role of lazy evaluation in amortized data structures. In Proceedings of the International Conference on Functional Programming, pages 62--72. ACM Press, May 1996. (pp 10, 12, 13)
....is uniquely determined by the binary decomposition of its size. A sequence of size (1011) 2 , for instance, is represented by the term One b 0 (Zero (One b 2 (One b 3 Nil) where b i is of type Fork i Leaf a. Now, since random access lists based on the 0 1 system are discussed at length in (Okasaki, 1998, Sec. 9.2.1 and 10.1.2) we will implement a zeroless representation based on the 1 2 system instead. The lessons we are going to learn will prove useful when we tackle the implementation of 2 3 finger search trees in Sec. 7 and 8. Recall that binary numeric representations are based on the idea that the digit d ....
Okasaki, Chris. 1996b (May). The role of lazy evaluation in amortized data structures.
....of the implementations presented here only achieve the stated complexity in the presence of memoization, as offered by lazy functional languages. Therefore, if these implementations are translated to an eager language such as ML, their complexity may not be the same, at least for persistent uses [Oka96c]. When an amortized complexity is given, we do not usually give details of the analysis by which it is obtained, but instead refer the reader to the original source. These analysis usually require the use of the standard techniques for determining amortized complexity: the potential and banker ....
....by which it is obtained, but instead refer the reader to the original source. These analysis usually require the use of the standard techniques for determining amortized complexity: the potential and banker methods [Tar85, CLR90] or the debit method described by Okasaki for persistent structures [Oka96b, Oka96c]. In the next section we give the definition of sequences used in this work and the operations supported by them. We define a class Sequence of which the implementations presented later will be made instances. We also describe how these implementations are classified. In section 3 we describe some ....
Chris Okasaki. The Role of Lazy Evaluation in Amortized Data Structures. In International Conference on Functional Programming, pages 62--72, May 1996.
.... b) Eq (a,b) where (a1,b1) a2,b2) a1= a2) b1= b2) Given this type for unionSet, the type of leavesSet is now inferred to be: leavesSet : Eq a) Tree a EqSet a 3 A data structure is persistent if, following an update, the old version of the data structure is still available (Okasaki [1996]) 4 Strictly speaking, the semantics of union does not require the elimination of duplicates that could be postponed until the set is observed by a membership test or by enumerating its elements. However, nothing fundamental is changed by such an implementation decision so in this paper we ....
....(This is precisely what STL does. A more attractive alternative is to make the bulk type choose its own representation. Items (1) and (2) have been fairly well studied. Clever algorithms have been developed that adapt the representation of a data type based on its size and usage (Brodal Okasaki [1996]; Chuang Hwang [1996] Okasaki [1996] It is less obvious how to tackle item (3) How can we build an implementation of Set that chose its representation based on what operations are available on the elements We return to this question in Section 3.3. 2.4 Summary In this section we have ....
[Article contains additional citation context not shown here]
C Okasaki [May 1996], "The role of lazy evaluation in amortized data structures," in Proc International Conference on Functional Programming, Philadelphia, ACM, 62--72.
.... and meld were destructive (e.g. using both delmin:x and meld:x:y in the same expression is not allowed) It is interesting to note that Okasaki has been able to remove this restriction of linear usage for many purely functional data structures by making judicious use of lazy evaluation (see [6, 7]) Theorem 1 (cf. 8, Lemma 9.2] There exists a potential function such that the amortized costs for top down skew heaps satisfy (in terms of comparisons) empty, isempty:x, and min:x cost 0, single:a costs at most 1, delmin:x costs at most log OE jxj, and meld:x:y costs at most log OE (jxj ....
C. Okasaki, The role of lazy evaluation in amortized data structures, in: ACM SIGPLAN International Conference on Functional Porgramming (May 1996) 62--72.
....of a data structure may be accessed or updated. Ephemerality is closely related to the notion of linearity (Wadler, 1990) When persistence is allowed, traditional amortized analyses break down because operations on expensive versions of a data structure can be repeated arbitrarily often. Okasaki (1995a; 1996) describes how to use the memoization implicit in lazy evaluation to support amortized data structures whose bounds hold even under persistence. However, of the above data structures, only pairing heaps appear to be amenable to this technique. Finally, our data structure borrows techniques from ....
.... Skew linking is borrowed from the random access lists of Okasaki (1995b) which in turn are a modification of the random access stacks of Myers (1983) We use skew linking to reduce the cost of insertion in binomial queues to O(1) but recursive slowdown (Kaplan Tarjan, 1995) and lazy evaluation (Okasaki, 1996) could be used for the same purpose. Data structural bootstrapping is used by Buchsbaum et al. Buchsbaum et al. 1995; Buchsbaum Tarjan, 1995) to support catenation for double ended queues, much as we use it to support melding for priority queues. 8 Discussion We have described the first ....
[Article contains additional citation context not shown here]
Okasaki, C. (1996) The role of lazy evaluation in amortized data structures. ACM SIGPLAN International Conference on Functional Programming pp. 62--72.
....uses destructive updates at the end of the list. Thus, queues are perhaps the simplest example of a data structure whose implementation in a functional setting is substantially different from its implementation in an imperative setting. For this reason, functional queues have been widely studied [11, 9, 3, 23, 24]. A minimal signature for queues appears in Figure 2. The three main operations are snoc (q, x) which adds an element x to the rear of queue q ; head (q) which extracts the first element of q ; and tail (q) which deletes the first element of q. The signature also includes a value empty ....
....Efficient Persistent Queues The above queues are very efficient as long as they are used in a single threaded fashion. Many applications obey this restriction, but for a general purpose queue library, we would prefer an implementation that is efficient even when used persistently. As discussed in [22, 24], lazy evaluation is the key to integrating amortization and persistence. The memoization implicit in lazy evaluation allows the same work to be shared between different threads instead of being repeated for each thread. Here the term threads refers not to concurrency, but to different paths of ....
[Article contains additional citation context not shown here]
Chris Okasaki. The role of lazy evaluation in amortized data structures. In ACM SIGPLAN International Conference on Functional Programming, pages 62-- 72, May 1996.
No context found.
Chris Okasaki. The role of lazy evaluation in amortized data structures. In Proceedings of the International Conference on Functional Programming, pages 62--72. ACM Press, May 1996.
No context found.
Okasaki, Chris. 1996b (May). The role of lazy evaluation in amortized data structures.
Online articles have much greater impact More about CiteSeer.IST Add search form to your site Submit documents Feedback
CiteSeer.IST - Copyright Penn State and NEC