Mercurial > hg > CbC > CbC_gcc
comparison include/fibheap.h @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 77e2b8dfacca |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* A Fibonacci heap datatype. | |
2 Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. | |
3 Contributed by Daniel Berlin (dan@cgsoftware.com). | |
4 | |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify it | |
8 under the terms of the GNU General Public License as published by | |
9 the Free Software Foundation; either version 2, or (at your option) | |
10 any later version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, but | |
13 WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
15 General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GCC; see the file COPYING. If not, write to | |
19 the Free Software Foundation, 51 Franklin Street - Fifth Floor, | |
20 Boston, MA 02110-1301, USA. */ | |
21 | |
22 /* Fibonacci heaps are somewhat complex, but, there's an article in | |
23 DDJ that explains them pretty well: | |
24 | |
25 http://www.ddj.com/articles/1997/9701/9701o/9701o.htm?topic=algoritms | |
26 | |
27 Introduction to algorithms by Corman and Rivest also goes over them. | |
28 | |
29 The original paper that introduced them is "Fibonacci heaps and their | |
30 uses in improved network optimization algorithms" by Tarjan and | |
31 Fredman (JACM 34(3), July 1987). | |
32 | |
33 Amortized and real worst case time for operations: | |
34 | |
35 ExtractMin: O(lg n) amortized. O(n) worst case. | |
36 DecreaseKey: O(1) amortized. O(lg n) worst case. | |
37 Insert: O(2) amortized. O(1) actual. | |
38 Union: O(1) amortized. O(1) actual. */ | |
39 | |
40 #ifndef _FIBHEAP_H_ | |
41 #define _FIBHEAP_H_ | |
42 | |
43 #include "ansidecl.h" | |
44 | |
45 typedef long fibheapkey_t; | |
46 | |
47 typedef struct fibheap | |
48 { | |
49 size_t nodes; | |
50 struct fibnode *min; | |
51 struct fibnode *root; | |
52 } *fibheap_t; | |
53 | |
54 typedef struct fibnode | |
55 { | |
56 struct fibnode *parent; | |
57 struct fibnode *child; | |
58 struct fibnode *left; | |
59 struct fibnode *right; | |
60 fibheapkey_t key; | |
61 void *data; | |
62 #if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4) | |
63 __extension__ unsigned long int degree : 31; | |
64 __extension__ unsigned long int mark : 1; | |
65 #else | |
66 unsigned int degree : 31; | |
67 unsigned int mark : 1; | |
68 #endif | |
69 } *fibnode_t; | |
70 | |
71 extern fibheap_t fibheap_new (void); | |
72 extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *); | |
73 extern int fibheap_empty (fibheap_t); | |
74 extern fibheapkey_t fibheap_min_key (fibheap_t); | |
75 extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t, | |
76 fibheapkey_t); | |
77 extern void *fibheap_replace_key_data (fibheap_t, fibnode_t, | |
78 fibheapkey_t, void *); | |
79 extern void *fibheap_extract_min (fibheap_t); | |
80 extern void *fibheap_min (fibheap_t); | |
81 extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *); | |
82 extern void *fibheap_delete_node (fibheap_t, fibnode_t); | |
83 extern void fibheap_delete (fibheap_t); | |
84 extern fibheap_t fibheap_union (fibheap_t, fibheap_t); | |
85 | |
86 #endif /* _FIBHEAP_H_ */ |