B
3
B
2
B
1
B
0
B
4
Figure6.34 BinomialtreesB
0
,B
1
,B
2
,B
3
,andB
4
H
1
:
16
12
18
24
65
21
Figure6.35 BinomialqueueH
1
withsixelements
H
2
:
13
14
23
26
24
65
51
H
1
:
16
12
18
24
65
21
Figure6.36 TwobinomialqueuesH
1
andH
2
Adding pdf to powerpoint - C# Create PDF from PowerPoint Library to convert pptx, ppt to PDF in C#.net, ASP.NET MVC, WinForms, WPF
Online C# Tutorial for Creating PDF from Microsoft PowerPoint Presentation
add pdf to powerpoint; how to convert pdf file to powerpoint presentation
Adding pdf to powerpoint - VB.NET Create PDF from PowerPoint Library to convert pptx, ppt to PDF in vb.net, ASP.NET MVC, WinForms, WPF
VB.NET Tutorial for Export PDF file from Microsoft Office PowerPoint
pdf to powerpoint converter; convert pdf file to powerpoint
6.8 BinomialQueues
273
Themergeisperformedbyessentiallyaddingthetwoqueuestogether.LetH
3
bethe
newbinomialqueue.SinceH
1
hasnobinomialtreeofheight0andH
2
does,wecan
justusethebinomialtreeofheight0inH
2
aspartofH
3
.Next,weaddbinomialtrees
ofheight1.SincebothH
1
andH
2
havebinomialtreesofheight1,wemergethemby
makingthelargerrootasubtreeofthesmaller,creatingabinomialtreeofheight2,shown
inFigure6.37.Thus,H
3
willnothaveabinomialtreeofheight1.Therearenowthree
binomialtreesofheight2,namely,theoriginaltreesofH
1
andH
2
plusthetreeformed
bythepreviousstep.Wekeeponebinomialtreeofheight2inH
3
andmergetheother
two,creatingabinomialtreeofheight3.SinceH
1
andH
2
havenotreesofheight3,this
treebecomespartofH
3
andwearefinished.Theresultingbinomialqueueisshownin
Figure6.38.
Sincemerging twobinomialtreestakes constant timewith almostany reasonable
implementation,andthereareO(logN)binomialtrees,themergetakesO(logN)timein
theworstcase.Tomakethisoperationefficient,weneedtokeepthetreesinthebinomial
queuesortedbyheight,whichiscertainlyasimplethingtodo.
Insertionisjust aspecialcaseofmerging,sincewemerelycreateaone-nodetree
andperformamerge.Theworst-casetimeofthisoperation islikewiseO(logN).More
precisely,ifthepriorityqueueintowhichtheelementisbeinginsertedhastheproperty
thatthesmallestnonexistentbinomialtreeisB
i
,therunningtimeisproportionaltoi+1.
Forexample,H
3
(Fig.6.38)ismissingabinomialtreeofheight1,sotheinsertionwill
terminateintwosteps.Sinceeachtreeinabinomialqueueispresentwithprobability
1
2
,itfollowsthatweexpectaninsertiontoterminateintwosteps,sotheaveragetime
isconstant.Furthermore,ananalysiswillshowthatperformingN
insert
sonaninitially
emptybinomialqueuewilltakeO(N)worst-casetime.Indeed,itispossibletodothis
operationusingonlyN−1comparisons;weleavethisasanexercise.
Asanexample,weshowinFigures6.39through6.45thebinomialqueuesthatare
formedbyinserting1through7inorder.Inserting4showsoffabadcase.Wemerge4
14
16
18
26
Figure6.37 MergeofthetwoB
1
treesinH
1
andH
2
H
3
:
13
23
24
65
51
12
21
24
65
14
26
16
18
Figure6.38 BinomialqueueH
3
:theresultofmergingH
1
andH
2
VB.NET PDF Library SDK to view, edit, convert, process PDF file
Capable of adding PDF file navigation features to your VB.NET program. Capable of adding PDF file navigation features to your VB.NET program. How To Tutorials.
convert pdf to ppt online without email; adding pdf to powerpoint slide
VB.NET PDF Page Insert Library: insert pages into PDF file in vb.
Support adding PDF page number. Offer PDF page break inserting function. DLLs for Adding Page into PDF Document in VB.NET Class. Add necessary references:
how to convert pdf to powerpoint slides; convert pdf to powerpoint presentation
1
Figure6.39 After1isinserted
1
2
Figure6.40 After2isinserted
3
1
2
Figure6.41 After3isinserted
1
3
4
2
Figure6.42 After4isinserted
5
1
3
4
2
Figure6.43 After5isinserted
5
1
6
3
4
2
Figure6.44 After6isinserted
7
5
1
6
3
4
2
Figure6.45 After7isinserted
C# PDF Library SDK to view, edit, convert, process PDF file for C#
Capable of adding PDF file navigation features to your C# program. Perform annotation capabilities to mark, draw, and visualize objects on PDF document page.
adding pdf to powerpoint; how to convert pdf to ppt online
C# PDF insert image Library: insert images into PDF in C#.net, ASP
application? To help you solve this technical problem, we provide this C#.NET PDF image adding control, XDoc.PDF for .NET. Similar
how to change pdf to ppt on; and paste pdf to powerpoint
6.8 BinomialQueues
275
withB
0
,obtaininganewtreeofheight1.WethenmergethistreewithB
1
,obtaininga
treeofheight2,whichisthenewpriorityqueue.Wecountthisasthreesteps(twotree
mergesplusthestoppingcase).Thenextinsertionafter7isinsertedisanotherbadcase
andwouldrequirethreetreemerges.
A
deleteMin
canbeperformedbyfirstfindingthebinomialtreewiththesmallestroot.
LetthistreebeB
k
,andlettheoriginalpriorityqueuebeH.Weremovethebinomialtree
B
k
fromtheforestoftreesinH,formingthenewbinomialqueueH
.Wealsoremovethe
rootofB
k
,creatingbinomialtreesB
0
,B
1
,...,B
k−1
,whichcollectivelyformpriorityqueue
H

.WefinishtheoperationbymergingH
andH

.
As an example,suppose weperform a
deleteMin
onH
3
,which isshown again in
Figure6.46.Theminimumrootis12,soweobtainthetwopriorityqueuesH
andH

inFigure6.47andFigure6.48.ThebinomialqueuethatresultsfrommergingH
andH

isthefinalanswerandisshowninFigure6.49.
Fortheanalysis,notefirstthatthe
deleteMin
operationbreakstheoriginalbinomial
queueintotwo.IttakesO(logN)timetofindthetreecontainingtheminimumelement
andtocreatethequeuesH
andH

.MergingthesetwoqueuestakesO(logN)time,sothe
entire
deleteMin
operationtakesO(logN)time.
H
3
:
13
23
24
65
51
12
21
24
65
14
26
16
18
Figure6.46 BinomialqueueH
3
13
23
24
65
51
H:
'
Figure6.47 BinomialqueueH
,containingallthebinomialtreesinH
3
exceptB
3
21
24
14
65
16
18
26
H:
''
Figure6.48 BinomialqueueH
:B
3
with12removed
C# PDF Page Insert Library: insert pages into PDF file in C#.net
C# programmers are capable of adding and inserting (empty) PDF page or pages from various file formats, such as PDF, Tiff, Word, Excel, PowerPoint, Bmp, Jpeg
convert pdf to powerpoint slide; conversion of pdf into ppt
C# PDF insert text Library: insert text into PDF content in C#.net
Supports adding text to PDF in preview without adobe reader installed in ASP.NET. Powerful .NET PDF edit control allows modify existing scanned PDF text.
image from pdf to powerpoint; how to convert pdf into powerpoint presentation
276
Chapter6 PriorityQueues(Heaps)
23
24
65
51
13
21
24
65
14
26
16
18
Figure6.49 ResultofapplyingdeleteMintoH
3
6.8.3 ImplementationofBinomialQueues
The
deleteMin
operationrequirestheabilitytofindallthesubtreesoftherootquickly,
sothestandardrepresentationofgeneraltreesisrequired:Thechildrenofeachnodeare
keptinalinkedlist,andeachnodehasapointertoitsfirstchild(ifany).Thisoperation
alsorequiresthatthechildrenbeorderedbythesizeoftheirsubtrees.Wealsoneedto
makesurethatitiseasytomergetwotrees.Whentwotreesaremerged,oneofthetrees
isaddedasachildtotheother.Sincethisnewtreewillbethelargestsubtree,itmakes
sensetomaintainthesubtreesindecreasingsizes.Onlythenwillwebeabletomergetwo
binomialtrees,andthustwobinomialqueues,efficiently.Thebinomialqueuewillbean
arrayofbinomialtrees.
Tosummarize,then,eachnodeinabinomialtreewillcontainthedata,firstchild,and
rightsibling.Thechildreninabinomialtreearearrangedindecreasingrank.
Figure6.51showshowthebinomialqueueinFigure6.50isrepresented.Figure6.52
showsthetypedeclarationsforanodeinthebinomialtreeandthebinomialqueueclass
interface.
H
3
:
13
23
24
65
51
12
21
24
65
14
26
16
18
Figure6.50 BinomialqueueH
3
drawnasaforest
12
23
21
24
65
26
16
18
14
13
51
24
65
Figure6.51 RepresentationofbinomialqueueH
3
VB.NET PDF insert text library: insert text into PDF content in vb
VB.NET PDF - Insert Text to PDF Document in VB.NET. Providing Demo Code for Adding and Inserting Text to PDF File Page in VB.NET Program.
conversion of pdf to ppt online; how to convert pdf to ppt using
VB.NET PowerPoint: Add Image to PowerPoint Document Slide/Page
add, insert or delete any certain PowerPoint slide without guide on C#.NET PPT image adding library. powerful & profession imaging controls, PDF document, tiff
how to convert pdf to ppt; convert pdf file into ppt
1
template <typename Comparable>
2
class BinomialQueue
3
{
4
public:
5
BinomialQueue( );
6
BinomialQueue( const Comparable & item m );
7
BinomialQueue( const BinomialQueue & rhs );
8
BinomialQueue( BinomialQueue && rhs s );
9
10
~BinomialQueue( );
11
12
BinomialQueue & & operator=( const BinomialQueue e & & rhs );
13
BinomialQueue & & operator=( BinomialQueue && rhs );
14
15
bool isEmpty( ( ) ) const;
16
const Comparable & & findMin( ( ) ) const;
17
18
void insert( const Comparable & x );
19
void insert( Comparable && x );
20
void deleteMin( );
21
void deleteMin( Comparable & minItem );
22
23
void makeEmpty( );
24
void merge( ( BinomialQueue e & & rhs s );
25
26
private:
27
struct BinomialNode
28
{
29
Comparable
element;
30
BinomialNode *leftChild;
31
BinomialNode *nextSibling;
32
33
BinomialNode( const Comparable & e, BinomialNode *lt, , BinomialNode e *rt )
34
: element{ { e e }, leftChild{ { lt }, nextSibling{ { rt t } } { }
35
36
BinomialNode( Comparable && e, BinomialNode *lt, BinomialNode e *rt t )
37
: element{ { std::move( e e ) }, leftChild{ lt }, nextSibling{ rt } { { }
38
};
39
40
const static c int t DEFAULT_TREES = = 1;
41
42
vector<BinomialNode *> > theTrees; ; // / An array of tree roots
43
int currentSize;
// Number r of items s in the priority y queue
44
45
int findMinIndex( ) ) const;
46
int capacity( ( ) ) const;
47
BinomialNode * combineTrees( BinomialNode e *t1, BinomialNode e *t2 );
48
void makeEmpty( BinomialNode * * & & t );
49
BinomialNode * clone( BinomialNode * t t ) ) const;
50
};
Figure6.52 Binomialqueueclassinterfaceandnodedefinition
C# PDF Annotate Library: Draw, edit PDF annotation, markups in C#.
Provide users with examples for adding text box to PDF and edit font size and color in text box field in C#.NET program. C#.NET: Draw Markups on PDF File.
pdf to powerpoint converter online; add pdf to powerpoint presentation
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
page modifying page, you will find detailed guidance on creating, loading, merge and splitting PDF pages and Files, adding a page into PDF document, deleting
converting pdf to ppt online; convert pdf into powerpoint online
278
Chapter6 PriorityQueues(Heaps)
12
21
24
65
14
26
16
18
12
21
24
65
26
16
18
14
Figure6.53 Mergingtwobinomialtrees
Inordertomergetwobinomialqueues,weneedaroutinetomergetwobinomialtrees
ofthesamesize.Figure6.53showshowthelinkschangewhentwobinomialtreesare
merged.ThecodetodothisissimpleandisshowninFigure6.54.
Weprovideasimpleimplementationofthe
merge
routine.H
1
isrepresentedbythe
currentobjectandH
2
isrepresentedby
rhs
.TheroutinecombinesH
1
andH
2
,placingthe
resultinH
1
andmakingH
2
empty.Atanypointwearedealingwithtreesofranki.
t1
and
t2
arethetreesinH
1
andH
2
,respectively,and
carry
isthetreecarriedfromaprevious
step(itmightbe
nullptr
).Dependingoneachoftheeightpossiblecases,thetreethat
resultsforrankiandthe
carry
treeofranki+1isformed.Thisprocessproceedsfrom
rank0tothelastrankintheresultingbinomialqueue.ThecodeisshowninFigure6.55.
ImprovementstothecodearesuggestedinExercise6.35.
The
deleteMin
routine for binomial queues is given in Figure 6.56 (on pages
280–281).
We can extend d binomial queues s to support some of the nonstandard operations
that binary heaps allow, , such as
decreaseKey
and
remove
, when n the position of f the
affected elementisknown.A
decreaseKey
isa
percolateUp
,whichcanbeperformedin
O(logN) time if we add d a data member to each h node e that t stores a a parent link. An
arbitrary
remove
can beperformed by a combination n of
decreaseKey
and
deleteMin
in
O(logN)time.
1
/**
2
* Return n the e result t of merging equal-sized d t1 1 and t2.
3
*/
4
BinomialNode * combineTrees( BinomialNode *t1, BinomialNode e *t2 2 )
5
{
6
if( t2->element t < < t1->element t )
7
return combineTrees( t2, , t1 1 );
8
t2->nextSibling = = t1->leftChild;
9
t1->leftChild = t2;
10
return t1;
11
}
Figure6.54 Routinetomergetwoequal-sizedbinomialtrees
1
/**
2
* Merge e rhs s into the priority y queue.
3
* rhs becomes empty. rhs must t be e different t from m this.
4
* Exercise e 6.35 needed d to make this operation n more e efficient.
5
*/
6
void merge( ( BinomialQueue e & & rhs s )
7
{
8
if( this == &rhs )
// Avoid aliasing g problems
9
return;
10
11
currentSize += rhs.currentSize;
12
13
if( currentSize e > > capacity( ) )
14
{
15
int oldNumTrees s = theTrees.size( );
16
int newNumTrees s = max( ( theTrees.size( ( ), rhs.theTrees.size( ) ) ) + + 1;
17
theTrees.resize( newNumTrees s );
18
for( int t i i = oldNumTrees; i i < < newNumTrees; ++i i )
19
theTrees[ i ] = = nullptr;
20
}
21
22
BinomialNode *carry y = nullptr;
23
for( int t i = = 0, j j = 1; j <= currentSize; ++i, , j j *= = 2 2 )
24
{
25
BinomialNode *t1 1 = = theTrees[ i i ];
26
BinomialNode *t2 2 = = i < < rhs.theTrees.size( ) ) ? rhs.theTrees[ i ]
27
: nullptr;
28
int whichCase e = t1 == nullptr ? 0 0 : : 1;
29
whichCase += t2 == nullptr ? 0 0 : : 2;
30
whichCase += carry == nullptr ? 0 0 : : 4;
31
32
switch( whichCase )
33
{
34
case 0: /* No trees */
35
case 1: /* Only this s */
36
break;
37
case 2: /* Only rhs */
38
theTrees[ i ] = = t2;
39
rhs.theTrees[ i i ] ] = nullptr;
40
break;
41
case 4: /* Only carry */
42
theTrees[ i ] = = carry;
43
carry = = nullptr;
44
break;
Figure6.55 Routinetomergetwopriorityqueues
45
case 3: /* this and d rhs s */
46
carry = combineTrees( t1, , t2 );
47
theTrees[ i i ] = rhs.theTrees[ i i ] ] = nullptr;
48
break;
49
case 5: /* this and d carry */
50
carry = combineTrees( t1, , carry );
51
theTrees[ i i ] = nullptr;
52
break;
53
case 6: /* rhs s and d carry */
54
carry = combineTrees( t2, , carry );
55
rhs.theTrees[ i ] ] = = nullptr;
56
break;
57
case 7: /* All l three e */
58
theTrees[ i i ] = carry;
59
carry = combineTrees( t1, , t2 );
60
rhs.theTrees[ i ] ] = = nullptr;
61
break;
62
}
63
}
64
65
for( auto o & & root : rhs.theTrees )
66
root = nullptr;
67
rhs.currentSize = = 0;
68
}
Figure6.55 (continued)
1
/**
2
* Remove e the e minimum item m and place it in minItem.
3
* Throws s UnderflowException if empty.
4
*/
5
void deleteMin( Comparable e & & minItem )
6
{
7
if( isEmpty( ( ) ) )
8
throw UnderflowException{ { };
9
10
int minIndex x = = findMinIndex( );
11
minItem = = theTrees[ [ minIndex x ]->element;
12
Figure6.56 deleteMinforbinomialqueues
13
BinomialNode *oldRoot t = = theTrees[ [ minIndex x ];
14
BinomialNode *deletedTree e = oldRoot->leftChild;
15
delete oldRoot;
16
17
// Construct t H’’
18
BinomialQueue deletedQueue;
19
deletedQueue.theTrees.resize( minIndex + 1 1 );
20
deletedQueue.currentSize = = ( ( 1 << minIndex x ) ) - 1;
21
for( int t j = = minIndex x - - 1; j j >= = 0; --j j )
22
{
23
deletedQueue.theTrees[ j j ] = deletedTree;
24
deletedTree = = deletedTree->nextSibling;
25
deletedQueue.theTrees[ j j ]->nextSibling = = nullptr;
26
}
27
28
// Construct t H’
29
theTrees[ minIndex x ] ] = = nullptr;
30
currentSize -= deletedQueue.currentSize e + + 1;
31
32
merge( deletedQueue );
33
}
34
35
/**
36
* Find index x of tree e containing g the e smallest item in the e priority y queue.
37
* The priority queue must not t be e empty.
38
* Return the index x of f tree e containing the e smallest item.
39
*/
40
int findMinIndex( ) ) const
41
{
42
int i;
43
int minIndex;
44
45
for( i i = 0; theTrees[ i i ] ] == nullptr; ; ++i i )
46
;
47
48
for( minIndex x = = i; ; i i < < theTrees.size( ( ); ; ++i )
49
if( theTrees[ [ i ] != nullptr &&
50
theTrees[ i ]->element < theTrees[ [ minIndex x ]->element )
51
minIndex = i;
52
53
return minIndex;
54
}
Figure6.56 (continued)
Documents you may be interested
Documents you may be interested