What happened to the thread that optionsScalper referred to? It doesn't seem to exist anymore.
Hi mstump,
There are a few forums that were designated "contributor-only" (for organizational and admin work) when we first started the site. Andy (The Armed Geometer) had inadvertently posted this question to one of those forums.
Andy's original post and Dr. Syme's response are included in this thread in their entirety. I should have made that clear when I wrote this. My apologies for not calling that out appropriately.
---O
There are a few forums that were designated "contributor-only" (for organizational and admin work) when we first started the site. Andy (The Armed Geometer) had inadvertently posted this question to one of those forums.
Andy's original post and Dr. Syme's response are included in this thread in their entirety. I should have made that clear when I wrote this. My apologies for not calling that out appropriately.
---O
I would use three constructors rather than carrying a red/black tag:
However, RB-trees are less prevelant in functional programming. In OCaml, they are not significantly faster than AVL trees for the operations they support (e.g. add, remove). Moreover, RB-trees cannot implement some important operations (e.g. union) as efficiently as AVL trees because the information required to balance pairs of trees is not present.
I'd like to see the F# standard library include fast set theoretic operations, generic AVL trees and a balanced-binary-tree-based functional array data structure.
Cheers,
Jon.
type 'a t = E | R of 'a t * 'a * 'a t | B of 'a t * 'a * 'a t
However, RB-trees are less prevelant in functional programming. In OCaml, they are not significantly faster than AVL trees for the operations they support (e.g. add, remove). Moreover, RB-trees cannot implement some important operations (e.g. union) as efficiently as AVL trees because the information required to balance pairs of trees is not present.
I'd like to see the F# standard library include fast set theoretic operations, generic AVL trees and a balanced-binary-tree-based functional array data structure.
Cheers,
Jon.
@jdh30 F# does indeed use an AVL tree for its Set implementation.
// taken from FSharp-2.0.0.0\source\fsharp\FSharp.Core\set.fs
type SetTree<'T> when 'T : comparison =
| SetEmpty // height = 0
| SetNode of 'T * SetTree<'T> * SetTree<'T> * int // height = int
| SetOne of 'T
Topic tags
- f# × 3660
- compiler × 263
- functional × 199
- c# × 119
- websharper × 114
- classes × 96
- web × 94
- book × 84
- .net × 82
- async × 72
- parallel × 43
- server × 43
- parsing × 41
- testing × 41
- asynchronous × 30
- monad × 28
- ocaml × 26
- tutorial × 26
- haskell × 25
- workflows × 22
- html × 21
- linq × 21
- introduction × 19
- silverlight × 19
- wpf × 19
- fpish × 18
- collections × 14
- pipeline × 14
- templates × 12
- monads × 11
- opinion × 10
- reactive × 10
- plugin × 9
- scheme × 9
- sitelets × 9
- solid × 9
- basics × 8
- concurrent × 8
- deployment × 8
- how-to × 8
- python × 8
- complexity × 7
- javascript × 6
- jquery × 6
- lisp × 6
- real-world × 6
- workshop × 6
- xaml × 6
- conference × 5
- dsl × 5
- java × 5
- metaprogramming × 5
- ml × 5
- scala × 5
- visual studio × 5
- formlets × 4
- fsi × 4
- lift × 4
- sql × 4
- teaching × 4
- alt.net × 3
- aml × 3
- enhancement × 3
- list × 3
- reflection × 3
- blog × 2
- compilation × 2
- computation expressions × 2
- corporate × 2
- courses × 2
- cufp × 2
- enterprise × 2
- entity framework × 2
- erlang × 2
- events × 2
- f# interactive × 2
- fsc × 2
- google maps × 2
- html5 × 2
- http × 2
- interactive × 2
- interface × 2
- iphone × 2
- iteratee × 2
- jobs × 2
- keynote × 2
- mvc × 2
- numeric × 2
- obfuscation × 2
- oop × 2
- packaging × 2
- pattern matching × 2
- pipelines × 2
- rx × 2
- script × 2
- seq × 2
- sockets × 2
- stm × 2
- tcp × 2
- trie × 2
- type × 2
- type provider × 2
- xna × 2
- zh × 2
- .net interop × 1
- 2012 × 1
- abstract class × 1
- accumulator × 1
- active pattern × 1
- addin × 1
- agents × 1
- agile × 1
- android × 1
- anonymous object × 1
- appcelerator × 1
- architecture × 1
- array × 1
- arrays × 1
- asp.net 4.5 × 1
- asp.net mvc × 1
- asp.net mvc 4 × 1
- asp.net web api × 1
- aspnet × 1
- ast × 1
- b-tree × 1
- bistro × 1
- bug × 1
- camtasia studio × 1
- canvas × 1
- class × 1
- client × 1
- clojure × 1
- closures × 1
- cloud × 1
- cms × 1
- coding diacritics × 1
- color highlighting × 1
- combinator × 1
- confirm × 1
- constructor × 1
- continuation-passing style × 1
- coords × 1
- coursera × 1
- csla × 1
- css × 1
- data × 1
- database × 1
- declarative × 1
- delete × 1
- dhtmlx × 1
- discriminated union × 1
- distance × 1
- docs × 1
- documentation × 1
- dol × 1
- domain × 1
- du × 1
- duf-101 × 1
- eclipse × 1
- edsl × 1
- em algorithm × 1
- emacs × 1
- emotion × 1
- error × 1
- etw × 1
- euclidean × 1
- event × 1
- example × 1
- ext js × 1
- extension methods × 1
- extra × 1
- facet pattern × 1
- fantomas × 1
- fear × 1
- float × 1
- fp × 1
- frank × 1
- fsdoc × 1
- fsharp.core × 1
- fsharp.powerpack × 1
- fsharpx × 1
- function × 1
- functional style × 1
- gc × 1
- generic × 1
- geometry × 1
- getlastwin32error × 1
- google × 1
- group × 1
- hash × 1
- history × 1
- hosting × 1
- httpcontext × 1
- https × 1
- hubfs × 1
- ie 8 × 1
- if-doc × 1
- inheritance × 1
- installer × 1
- interpreter × 1
- io × 1
- ios × 1
- ipad × 1
- kendo × 1
- learning × 1
- licensing × 1
- macro × 1
- macros × 1
- maps × 1
- markup × 1
- marshal × 1
- math × 1
- metro style × 1
- micro orm × 1
- minimum-requirements × 1
- multidimensional × 1
- multithreading × 1
- mysql × 1
- mysqlclient × 1
- nancy × 1
- nested × 1
- nested loops × 1
- node × 1
- object relation mapper × 1
- object-oriented × 1
- offline × 1
- option × 1
- orm × 1
- osx × 1
- owin × 1
- paper × 1
- parameter × 1
- performance × 1
- persistent data structure × 1
- phonegap × 1
- pola × 1
- powerpack × 1
- prefix tree × 1
- principle of least authority × 1
- programming × 1
- projekt_feladat × 1
- protected × 1
- provider × 1
- ptvs × 1
- quant × 1
- quotations × 1
- range × 1
- raphael × 1
- razor × 1
- rc × 1
- real-time × 1
- reference × 1
- restful × 1
- round table × 1
- runtime × 1
- scriptcs × 1
- scripting × 1
- service × 1
- session-state × 1
- sitelet × 1
- stickynotes × 1
- stress × 1
- strong name × 1
- structures × 1
- tdd × 1
- template × 1
- tracing × 1
- tsunamiide × 1
- type inference × 1
- type providers × 1
- upload × 1
- vb × 1
- vb.net × 1
- vector × 1
- visual f# × 1
- visual studio 11 × 1
- visual studio shell × 1
- visualstudio × 1
- web api × 1
- webapi × 1
- windows 8 × 1
- windows-phone × 1
- winrt × 1
- xml × 1
|
Copyright (c) 2011-2012 IntelliFactory. All rights reserved. Home | Products | Consulting | Trainings | Blogs | Jobs | Contact Us |
Built with WebSharper |
Consider for a moment a binary tree(1). The job of a binary tree is to provide for operations on dynamic sets of data. These include search, min, max, etc. The binary tree represents a reasonable data structure for many different sets of data to support these operations. From (1) I'll quote:
The problem with binary trees, while they are useful in many applications, is that the "height" of the tree determines the running time of algorithms that operate on the tree. So if a binary tree, at runtime, has a height that is nearly equal to the number of elements of the set that it describes, the binary tree provides little improvement in running time in the above mentioned operations.
The Red-Black tree attempts to overcome this difficulty without a priori knowledge of the set that is to be used. The goal of the Red-Black tree is to provide for algorithms with O(lg n) running time, i.e. the worst case for any algorithm should complete after log n steps where n is the number of items in the set. The implementation of a Red-Black tree is similar to a binary tree, but with one key difference. Each node in the tree is given an additional attribute, color. With a few simple rules for coloring, the Red-Black tree achieves balance, i.e. the height of the tree does not approach the count of the members of the set that it describes and therefore, the running times for operations on the tree are reduced.
In a recent thread, How do I? , The Armed Geometer asked for an example implementation of Red-Black Trees:
Dr. Syme responded (please note that I've used the new CS2.0 addin for code coloring with the F# enhancements that Scott and I have done to color Dr. Syme's code; as of this writing, we are testing; coloring wasn't available to Dr. Syme as of his writing):
1. Cormen, Lieserson & Rivest, Introduction to Algorithms (First Edition). MIT Press, Cambridge, MA, USA; 1990. Chapters 13-14.