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