Mercurial > hg > CbC > CbC_gcc
annotate include/fibheap.h @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
rev | line source |
---|---|
0 | 1 /* A Fibonacci heap datatype. |
145 | 2 Copyright (C) 1998-2020 Free Software Foundation, Inc. |
0 | 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 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
45 #ifdef __cplusplus |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
46 extern "C" { |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
47 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
48 |
0 | 49 typedef long fibheapkey_t; |
50 | |
51 typedef struct fibheap | |
52 { | |
53 size_t nodes; | |
54 struct fibnode *min; | |
55 struct fibnode *root; | |
56 } *fibheap_t; | |
57 | |
58 typedef struct fibnode | |
59 { | |
60 struct fibnode *parent; | |
61 struct fibnode *child; | |
62 struct fibnode *left; | |
63 struct fibnode *right; | |
64 fibheapkey_t key; | |
65 void *data; | |
66 #if defined (__GNUC__) && (!defined (SIZEOF_INT) || SIZEOF_INT < 4) | |
67 __extension__ unsigned long int degree : 31; | |
68 __extension__ unsigned long int mark : 1; | |
69 #else | |
70 unsigned int degree : 31; | |
71 unsigned int mark : 1; | |
72 #endif | |
73 } *fibnode_t; | |
74 | |
75 extern fibheap_t fibheap_new (void); | |
76 extern fibnode_t fibheap_insert (fibheap_t, fibheapkey_t, void *); | |
77 extern int fibheap_empty (fibheap_t); | |
78 extern fibheapkey_t fibheap_min_key (fibheap_t); | |
79 extern fibheapkey_t fibheap_replace_key (fibheap_t, fibnode_t, | |
80 fibheapkey_t); | |
81 extern void *fibheap_replace_key_data (fibheap_t, fibnode_t, | |
82 fibheapkey_t, void *); | |
83 extern void *fibheap_extract_min (fibheap_t); | |
84 extern void *fibheap_min (fibheap_t); | |
85 extern void *fibheap_replace_data (fibheap_t, fibnode_t, void *); | |
86 extern void *fibheap_delete_node (fibheap_t, fibnode_t); | |
87 extern void fibheap_delete (fibheap_t); | |
88 extern fibheap_t fibheap_union (fibheap_t, fibheap_t); | |
89 | |
55
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
90 #ifdef __cplusplus |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
91 } |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
92 #endif |
77e2b8dfacca
update it from 4.4.3 to 4.5.0
ryoma <e075725@ie.u-ryukyu.ac.jp>
parents:
0
diff
changeset
|
93 |
0 | 94 #endif /* _FIBHEAP_H_ */ |