Get Handbook of Data Structures and Applications Dinesh P. Mehta Free All Chapters

Download as pdf or txt
Download as pdf or txt
You are on page 1of 53

Full download test bank at ebook textbookfull.

com

Handbook of Data Structures and

CLICK LINK TO DOWLOAD

https://textbookfull.com/product/handbook-of-
data-structures-and-applications-dinesh-p-
mehta/

textbookfull
More products digital (pdf, epub, mobi) instant
download maybe you interests ...

Probabilistic data structures and algorithms for big


data applications Gakhov

https://textbookfull.com/product/probabilistic-data-structures-
and-algorithms-for-big-data-applications-gakhov/

Advanced Data Structures Theory and Applications 1st


Edition Suman Saha

https://textbookfull.com/product/advanced-data-structures-theory-
and-applications-1st-edition-suman-saha/

Advances in Big Data and Cloud Computing Proceedings of


ICBDCC18 J. Dinesh Peter

https://textbookfull.com/product/advances-in-big-data-and-cloud-
computing-proceedings-of-icbdcc18-j-dinesh-peter/

Learning functional data structures and algorithms


learn functional data structures and algorithms for
your applications and bring their benefits to your work
now Khot
https://textbookfull.com/product/learning-functional-data-
structures-and-algorithms-learn-functional-data-structures-and-
algorithms-for-your-applications-and-bring-their-benefits-to-
Big Data Analytics with Java 1st Edition Rajat Mehta

https://textbookfull.com/product/big-data-analytics-with-
java-1st-edition-rajat-mehta/

Handbook of Statistical Analysis and Data Mining


Applications 2nd Edition Robert Nisbet

https://textbookfull.com/product/handbook-of-statistical-
analysis-and-data-mining-applications-2nd-edition-robert-nisbet/

Cloud Native Data Center Networking 1st Edition Dinesh


G. Dutt

https://textbookfull.com/product/cloud-native-data-center-
networking-1st-edition-dinesh-g-dutt/

Cloud Native Data Center Networking Architecture


Protocols and Tools Dinesh G. Dutt

https://textbookfull.com/product/cloud-native-data-center-
networking-architecture-protocols-and-tools-dinesh-g-dutt/

Learning Functional Data Structures and Algorithms


Learn functional data structures and algorithms for
your applications and bring their benefits to your work
now 1st Edition Atul S. Khot
https://textbookfull.com/product/learning-functional-data-
structures-and-algorithms-learn-functional-data-structures-and-
algorithms-for-your-applications-and-bring-their-benefits-to-
Handbook of
Data Structures
and Applications
Second Edition
Handbook of
Data Structures
and Applications
Second Edition

Edited by
Dinesh P. Mehta
Sartaj Sahni
MATLAB R
is a trademark of The MathWorks, Inc. and is used with permission. The MathWorks does not warrant the accuracy of the text or
exercises in this book. This book’s use or discussion of MATLABR
software or related products does not constitute endorsement or sponsorship
by The MathWorks of a particular pedagogical approach or particular use of the MATLAB R
software.

CRC Press
Taylor & Francis Group
6000 Broken Sound Parkway NW, Suite 300
Boca Raton, FL 33487-2742


c 2018 by Taylor & Francis Group, LLC
CRC Press is an imprint of Taylor & Francis Group, an Informa business

No claim to original U.S. Government works

Printed on acid-free paper

International Standard Book Number-13: 978-1-4987-0185-3 (Hardback)

This book contains information obtained from authentic and highly regarded sources. Reasonable efforts have been made to publish reliable data
and information, but the author and publisher cannot assume responsibility for the validity of all materials or the consequences of their use. The
authors and publishers have attempted to trace the copyright holders of all material reproduced in this publication and apologize to copyright
holders if permission to publish in this form has not been obtained. If any copyright material has not been acknowledged please write and let us
know so we may rectify in any future reprint.

Except as permitted under U.S. Copyright Law, no part of this book may be reprinted, reproduced, transmitted, or utilized in any form by
any electronic, mechanical, or other means, now known or hereafter invented, including photocopying, microfilming, and recording, or in any
information storage or retrieval system, without written permission from the publishers.

For permission to photocopy or use material electronically from this work, please access www.copyright.com (http://www.copyright.com/) or
contact the Copyright Clearance Center, Inc. (CCC), 222 Rosewood Drive, Danvers, MA 01923, 978-750-8400. CCC is a not-for-profit organi-
zation that provides licenses and registration for a variety of users. For organizations that have been granted a photocopy license by the CCC, a
separate system of payment has been arranged.

Trademark Notice: Product or corporate names may be trademarks or registered trademarks, and are used only for identification and explanation
without intent to infringe.

Library of Congress Cataloging-in-Publication Data

Names: Mehta, Dinesh P., editor. | Sahni, Sartaj, editor.


Title: Handbook of data structures and applications / edited by Dinesh P. Mehta and Sartaj Sahni.
Other titles: Data structures and applications
Description: Second edition. | Boca Raton, Florida : CRC Press, [2018] | Includes bibliographical references and index.
Identifiers: LCCN 2017041375| ISBN 9781498701853 (hardback) | ISBN 9781315119335 (e-book)
Subjects: LCSH: System design--Handbooks, manuals, etc. | Data structures (Computer science)--Handbooks, manuals, etc.
Classification: LCC QA76.9.S88 H363 2005 | DDC 005.7/3--dc23 LC record available at https://lccn.loc.gov/2017041375

Visit the Taylor & Francis Web site at


http://www.taylorandfrancis.com

and the CRC Press Web site at


http://www.crcpress.com
To our wives,
Usha Mehta and Neeta Sahni
Contents

Preface to the Second Edition .....................................................................................................................................xi


Preface to the First Edition........................................................................................................................................xiii
Editors .......................................................................................................................................................................... xv
Contributors ..............................................................................................................................................................xvii

PART I Fundamentals
1 Analysis of Algorithms ....................................................................................................................................... 3
Sartaj Sahni
2 Basic Structures ................................................................................................................................................. 23
Dinesh P. Mehta
3 Trees ................................................................................................................................................................... 35
Dinesh P. Mehta
4 Graphs ................................................................................................................................................................ 49
Narsingh Deo

PART II Priority Queues


5 Leftist Trees........................................................................................................................................................ 69
Sartaj Sahni
6 Skew Heaps ........................................................................................................................................................ 77
C. Pandu Rangan
7 Binomial, Fibonacci, and Pairing Heaps......................................................................................................... 85
Michael L. Fredman
8 Double-Ended Priority Queues ....................................................................................................................... 97
Sartaj Sahni

PART III Dictionary Structures


9 Hash Tables ......................................................................................................................................................117
Pat Morin
10 Bloom Filter and Its Variants .........................................................................................................................131
Shigang Chen
11 Balanced Binary Search Trees ........................................................................................................................151
Arne Andersson, Rolf Fagerberg, and Kim S. Larsen
12 Finger Search Trees .........................................................................................................................................171
Gerth Stølting Brodal

vii
viii Contents

13 Splay trees ........................................................................................................................................................179


Sanjeev Saxena
14 Randomized Dictionary Structures...............................................................................................................197
C. Pandu Rangan
15 Trees with Min Weighted Path Length..........................................................................................................215
Wojciech Rytter
16 B Trees ..............................................................................................................................................................233
Donghui Zhang

PART IV Multidimensional/Spatial Structures


17 Multidimensional Spatial Data Structures....................................................................................................251
Hanan Samet
18 Planar Straight Line Graphs ...........................................................................................................................277
Siu-Wing Cheng
19 Interval, Segment, Range, Priority Search Trees ..........................................................................................291
D. T. Lee and Hung-I Yu
20 Quadtrees and Octtrees ..................................................................................................................................309
Srinivas Aluru
21 BSP Trees..........................................................................................................................................................329
Bruce F. Naylor
22 R-Trees .............................................................................................................................................................343
Scott Leutenegger and Mario A. Lopez
23 Managing Spatio-Temporal Data ..................................................................................................................359
Sumeet Dua and S. S. Iyengar
24 Kinetic Data Structures ..................................................................................................................................377
Leonidas Guibas
25 Online Dictionary Structures.........................................................................................................................389
Teofilo F. Gonzalez
26 Cuttings............................................................................................................................................................397
Bernard Chazelle
27 Approximate Geom Query Structures ..........................................................................................................405
Christian A. Duncan and Michael T. Goodrich
28 Geometric and Spatial Data Structures in External Memory .....................................................................419
Jeffrey Scott Vitter

PART V Miscellaneous
29 Tries ..................................................................................................................................................................445
Sartaj Sahni
30 Suffix Trees and Suffix Arrays ........................................................................................................................461
Srinivas Aluru
31 String Searching ..............................................................................................................................................477
Andrzej Ehrenfeucht and Ross M. McConnell
Contents ix

32 Binary Decision Diagrams .............................................................................................................................495


Shin-ichi Minato
33 Persistent Data Structures ..............................................................................................................................511
Haim Kaplan
34 Data Structures for Sets ..................................................................................................................................529
Rajeev Raman
35 Cache Oblivious Data Structures...................................................................................................................545
Lars Arge, Gerth Stølting Brodal, and Rolf Fagerberg
36 Dynamic Trees.................................................................................................................................................567
Camil Demetrescu, Irene Finocchi, and Giuseppe F. Italiano
37 Dynamic Graphs .............................................................................................................................................581
Camil Demetrescu, Irene Finocchi, and Giuseppe F. Italiano
38 Succinct Representation of Data Structures .................................................................................................595
J. Ian Munro and S. Srinivasa Rao
39 Randomized Graph Data Structures .............................................................................................................611
Surender Baswana and Sandeep Sen
40 Searching and Priority Queues in o(log n) Time .........................................................................................627
Arne Andersson

PART VI Data Structures in Langs and Libraries


41 Functional Data Structures ............................................................................................................................639
Chris Okasaki
42 LEDA, a Platform for Combinatorial and Geometric Computing.............................................................653
Stefan Naeher
43 Data Structures in C++...................................................................................................................................667
Mark Allen Weiss
44 Data Structures in JDSL..................................................................................................................................679
Michael T. Goodrich, Roberto Tamassia, and Luca Vismara
45 Data Structure Visualization ..........................................................................................................................697
John Stasko
46 Drawing Trees..................................................................................................................................................707
Sebastian Leipert
47 Drawing Graphs ..............................................................................................................................................723
Peter Eades and Seok-Hee Hong
48 Concurrent Data Structures...........................................................................................................................741
Mark Moir and Nir Shavit

PART VII Applications


49 IP Router Tables ..............................................................................................................................................765
Sartaj Sahni, Kun Suk Kim, and Haibin Lu
50 Multidimensional Packet Classification........................................................................................................783
Pankaj Gupta
x Contents

51 Data Structures in Web Information Retrieval ............................................................................................799


Monika Henzinger
52 The Web as a Dynamic Graph .......................................................................................................................805
S. N. Maheshwari
53 Layout Data Structures ...................................................................................................................................817
Dinesh P. Mehta
54 Floorplan Rep in VLSI....................................................................................................................................833
Zhou Feng, Bo Yao, and Chung-Kuan Cheng
55 Computer Graphics.........................................................................................................................................857
Dale McMullin and Alyn Rockwood
56 Geographic Information Systems ..................................................................................................................871
Bernhard Seeger and Peter Widmayer
57 Collision Detection .........................................................................................................................................889
Ming C. Lin and Dinesh Manocha
58 Image Data Structures ....................................................................................................................................903
S. S. Iyengar, V. K. Vaishnavi, and S. Gunasekaran
59 Computational Biology ..................................................................................................................................917
Paolo Ferragina, Stefan Kurtz, Stefano Lonardi, and Giovanni Manzini
60 Data Structures for Cheminformatics...........................................................................................................935
Dinesh P. Mehta and John D. Crabtree
61 Elimination Structures in Scientific Computing..........................................................................................945
Alex Pothen and Sivan Toledo
62 Data Structures for Databases........................................................................................................................967
Joachim Hammer and Markus Schneider
63 Data Structures for Big Data Stores...............................................................................................................983
Arun A. Ravindran and Dinesh P. Mehta
64 Data Mining.....................................................................................................................................................997
Vipin Kumar, Pang-Ning Tan, and Michael Steinbach
65 Computational Geometry: Fundamental Structures.................................................................................1013
Mark de Berg and Bettina Speckmann
66 Computational Geometry: Proximity and Location..................................................................................1027
Sunil Arya and David M. Mount
67 Computational Geometry: Generalized (or Colored) Intersection Searching........................................1043
Prosenjit Gupta, Ravi Janardan, Saladi Rahul, and Michiel Smid
Index ........................................................................................................................................................................1059
Preface to the Second Edition

It has been over a decade since the first edition of this handbook was published in 2005. In this edition, we have attempted to
capture advances in data structures while retaining the seven-part structure of the first edition. As one would expect, the discipline
of data structures has matured with advances not as rapidly forthcoming as in the twentieth century. Nevertheless, there have
been areas that have seen significant progress that we have focused on in this edition.
We have added four new chapters on Bloom Filters; Binary Decision Diagrams; Data Structures for Cheminformatics; and
Data Structures for Big Data Stores. In addition, we have updated 13 other chapters from the original edition.

Dinesh P. Mehta
Sartaj Sahni
October 2017

xi
Preface to the First Edition

In the late 1960s, Donald Knuth, winner of the 1974 Turing Award, published his landmark book The Art of Computer Program-
ming: Fundamental Algorithms. This book brought together a body of knowledge that defined the data structures area. The term
data structure, itself, was defined in this book to be A table of data including structural relationships. Niklaus Wirth, the inven-
tor of the Pascal language and winner of the 1984 Turing award, stated that “Algorithms + Data Structures = Programs.” The
importance of algorithms and data structures has been recognized by the community and consequently, every undergraduate
Computer Science curriculum has classes on data structures and algorithms. Both of these related areas have seen tremendous
advances in the decades since the appearance of the books by Knuth and Wirth. Although there are several advanced and special-
ized texts and handbooks on algorithms (and related data structures), there is, to the best of our knowledge, no text or handbook
that focuses exclusively on the wide variety of data structures that have been reported in the literature. The goal of this handbook
is to provide a comprehensive survey of data structures of different types that are in existence today.
To this end, we have subdivided this handbook into seven parts, each of which addresses a different facet of data structures.
Part I is a review of introductory material. Although this material is covered in all standard data structures texts, it was included
to make the handbook self-contained and in recognition of the fact that there are many practitioners and programmers who
may not have had a formal education in computer science. Parts II through IV discuss Priority Queues, Dictionary Structures,
and Multidimensional structures, respectively. These are all well-known classes of data structures. Part V is a catch-all used for
well-known data structures that eluded easy classification. Parts I through V are largely theoretical in nature: they discuss the data
structures, their operations and their complexities. Part VI addresses mechanisms and tools that have been developed to facilitate
the use of data structures in real programs. Many of the data structures discussed in previous parts are very intricate and take
some effort to program. The development of data structure libraries and visualization tools by skilled programmers are of critical
importance in reducing the gap between theory and practice. Finally, Part VII examines applications of data structures. The
deployment of many data structures from Parts I through V in a variety of applications is discussed. Some of the data structures
discussed here have been invented solely in the context of these applications and are not well-known to the broader community.
Some of the applications discussed include Internet routing, web search engines, databases, data mining, scientific computing,
geographical information systems, computational geometry, computational biology, VLSI floorplanning and layout, computer
graphics and image processing.
For data structure and algorithm researchers, we hope that the handbook will suggest new ideas for research in data structures
and for an appreciation of the application contexts in which data structures are deployed. For the practitioner who is devising
an algorithm, we hope that the handbook will lead to insights in organizing data that make it possible to solve the algorithmic
problem more cleanly and efficiently. For researchers in specific application areas, we hope that they will gain some insight from
the ways other areas have handled their data structuring problems.
Although we have attempted to make the handbook as complete as possible, it is impossible to undertake a task of this mag-
nitude without some omissions. For this, we apologize in advance and encourage readers to contact us with information about
significant data structures or applications that do not appear here. These could be included in future editions of this handbook.
We would like to thank the excellent team of authors, who are at the forefront of research in data structures, who have contributed
to this handbook. The handbook would not have been possible without their painstaking efforts. We are extremely saddened by
the untimely demise of a prominent data structures researcher, Professor Gísli R. Hjaltason, who was to write a chapter for this
handbook. He will be missed greatly by the computer science community. Finally, we would like to thank our families for their
support during the development of the handbook.

Dinesh P. Mehta
Sartaj Sahni
April 2004

xiii
xiv Preface to the First Edition

MATLAB R
is a registered trademark of The MathWorks, Inc. For product information, please contact:
The MathWorks, Inc.
3 Apple Hill Drive
Natick, MA 01760-2098 USA Tel: 508 647 7000
Fax: 508-647-7001
E-mail: [email protected]
Web: www.mathworks.com
Editors

Dinesh P. Mehta has been on the faculty of the Colorado School of Mines since 2000, where he is currently professor in the
Department of Computer Science. He earned degrees (all in computer science) from the Indian Institute of Technology Bombay,
the University of Minnesota, and the University of Florida. Before joining Mines in 2000, he was on the faculty of the University
of Tennessee Space Institute, where he received the Vice President’s Award for Teaching Excellence in 1997. He was a visiting
professor at Intel’s Strategic CAD Labs for several months in 1996 and 1997 and at the Tata Research Development and Design
Center (in Pune, India) in 2007. He has also received graduate teaching awards at Mines in 2007, 2008, and 2009.
He was assistant department head from 2004 to 2008 and interim department head from 2008 to 2010 in the former Depart-
ment of Mathematical and Computer Sciences and served as president of the Mines Faculty Senate in 2016–2017.
Dr. Mehta is the coauthor of the book, Fundamentals of Data Structures in C++ and coeditor of the Handbook of Algorithms
for VLSI Physical Design Automation. He serves as associate director of the ORwE (Operations Research with Engineering) PhD
program at Mines and is currently an associate editor of ACM Computing Surveys. His current research interests are in chemin-
formatics, computational materials, and big graph analytics.
Sartaj Sahni is a distinguished professor of computer and information sciences and engineering at the University of Florida. He
is also a member of the European Academy of Sciences, a Fellow of IEEE, ACM, AAAS, and Minnesota Supercomputer Institute,
and a distinguished alumnus of the Indian Institute of Technology, Kanpur. Dr. Sahni is the recipient of the 1997 IEEE Computer
Society Taylor L. Booth Education Award, the 2003 IEEE Computer Society W. Wallace McDowell Award, and the 2003 ACM Karl
Karlstrom Outstanding Educator Award. Dr. Sahni earned his BTech (electrical engineering) degree from the Indian Institute of
Technology, Kanpur, and MS and PhD in computer science from Cornell University. Dr. Sahni has published over 400 research
papers and written 15 books. His research publications are on the design and analysis of efficient algorithms, parallel computing,
interconnection networks, design automation, and medical algorithms.
Dr. Sahni is the editor-in-chief of the ACM Computing Surveys, a managing editor of the International Journal of Foundations
of Computer Science, and a member of the editorial boards of 17 other journals. He is a past coeditor-in-chief of the Journal of
Parallel and Distributed Computing. He has served as program committee chair, general chair, and a keynote speaker at many
conferences. Dr. Sahni has served on several NSF (National Science Foundation) and NIH (National Institutes of Health) panels
and he has been involved as an external evaluator of several computer science and engineering departments.

xv
Contributors

Srinivas Aluru Siu-Wing Cheng


Georgia Institute of Technology The Hong Kong University of Science
Atlanta, Georgia and Technology
Kowloon, Hong Kong
Arne Andersson
Uppsala University Camil Demetrescu
Uppsala, Sweden Sapienza University of Rome
Rome, Italy
Lars Arge
University of Aarhus Narsingh Deo
Aarhus, Denmark University of Central Florida
Orlando, Florida
Sunil Arya
The Hong Kong University of Science Sumeet Dua
and Technology Louisiana Tech University
Kowloon, Hong Kong Ruston, Louisiana

Surender Baswana Christian A. Duncan


Indian Institute of Technology, Kanpur Quinnipiac University
Kanpur, India Hamden, Connecticut

Mark de Berg Peter Eades


Eindhoven University of Technology University of Sydney
Eindhoven, The Netherlands Sydney, Australia

Gerth Stølting Brodal Andrzej Ehrenfeucht


University of Aarhus University of Colorado
Aarhus, Denmark Boulder, Colorado

Bernard Chazelle Rolf Fagerberg


Department of Computer Science University of Southern Denmark
Princeton University Odense, Denmark
Princeton, New Jersey
Zhou Feng
John D. Crabtree Fudan University
Department of Computer Science Shanghai, China
and Information Systems
University of North Alabama Paolo Ferragina
Florence, Alabama Università di Pisa
Pisa, Italy
Shigang Chen
Computer and Information Science Irene Finocchi
and Engineering Department of Computer Science
University of Florida Sapienza University of Rome
Gainesville, Florida Rome, Italy

Chung-Kuan Cheng Michael L. Fredman


University of California Rutgers University
San Diego, California New Brunswick, New Jersey

xvii
xviii Contributors

Teofilo F. Gonzalez Kim S. Larsen


Department of Computer Science University of Southern Denmark
University of California Odense, Denmark
Santa Barbara, California
D. T. Lee
Michael T. Goodrich Institute of Information Science
University of California Academia Sinica
Irvine, California Taipei, Taiwan

Leonidas Guibas Scott Leutenegger


Stanford University Department of Computer Science
Palo Alto, California University of Denver
Denver, Colorado
Prosenjit Gupta
Ming C. Lin
Department of Computer Science
University of North Carolina
and Engineering
Chapel Hill, North Carolina
NIIT University
Rajasthan, India
Stefano Lonardi
University of California, Riverside
Monika Henzinger Riverside, California
University of Vienna
Vienna, Austria Mario A. Lopez
Department of Computer Science
Seok-Hee Hong University of Denver
University of Sydney Denver, Colorado
Sydney, Australia
S. N. Maheshwari
Giuseppe F. Italiano Indian Institute of Technology Delhi
Department of Civil Engineering Delhi, India
and Computer Science Engineering
University of Rome Dinesh Manocha
Tor Vergata Rome, Italy University of North Carolina
Chapel Hill, North Carolina
S. S. Iyengar
Florida International University Giovanni Manzini
Miami, Florida Università del Piemonte Orientale
Vercelli VC, Italy
Ravi Janardan
Department of Computer Science and Engineering Ross M. McConnell
University of Minnesota Colorado State University
Minneapolis, Minnesota Fort Collins, Colorado

Dinesh P. Mehta
Haim Kaplan
Department of Computer Science
Tel Aviv University
Colorado School of Mines
Tel Aviv, Israel
Golden, Colorado

Vipin Kumar Shin-ichi Minato


University of Minnesota Hokkaido University
Minneapolis, Minnesota Sapporo, Japan

Stefan Kurtz Pat Morin


University of Hamburg Carleton University
Hamburg, Germany Ottawa, Ontario, Canada
Contributors xix

David M. Mount Institute for Advanced Computer Studies


University of Maryland University of Maryland
College Park, Maryland College Park, Maryland

J. Ian Munro Sanjeev Saxena


University of Waterloo Department of Computer Science & Engineering
Waterloo, Ontario, Canada Indian Institute of Technology, Kanpur
Kanpur, India
Stefan Naeher
Department of Computer Science Markus Schneider
University of Trier University of Florida
Trier, Germany Gainesville, Florida
Chris Okasaki
Bernhard Seeger
United States Military Academy
University of Marburg
West Point, New York
Marburg, Germany
Alex Pothen
Computer Science Department Purdue University Sandeep Sen
West Lafayette, Indiana Indian Institute of Technology, Delhi
New Delhi, India
Saladi Rahul
Department of Computer Science Michiel Smid
University of Illinois School of Computer Science
Urbana, Illinois Carleton University
Ottawa, Ontario, Canada
Rajeev Raman
University of Leicester Bettina Speckmann
Leicester, United Kingdom Eindhoven University of Technology
Eindhoven, The Netherlands
C. Pandu Rangan
Indian Institute of Technology, Madras John Stasko
Chennai, India School of Interactive Computing
Georgia Institute of Technology
S. Srinivasa Rao Atlanta, Georgia
Seoul National University
Seoul, South Korea Michael Steinbach
University of Minnesota
Arun A. Ravindran Minneapolis, Minnesota
Department of Electrical and Computer Engineering
University of North Carolina at Charlotte Roberto Tamassia
Charlotte, North Carolina Brown University
Providence, Rhode Island
Wojciech Rytter
Warsaw University Pang-Ning Tan
Warsaw, Poland Michigan State University
East Lansing, Michigan
Sartaj Sahni
University of Florida Sivan Toledo
Gainesville, Florida Tel Aviv University
Tel Aviv, Israel
Hanan Samet
Computer Science Department Luca Vismara
Center for Automation Research Brown University, Providence
and Rhode Island
xx Contributors

Jeffrey Scott Vitter Bo Yao


Department of Computer and Information Science University of California
The University of Mississippi San Diego, California
Oxford, Mississippi
Hung-I Yu
Mark Allen Weiss Institute of Information Science
Florida International University Academia Sinica
Miami, Florida Taipei, Taiwan

Peter Widmayer
ETH Zürich
Zürich, Switzerland
I
Fundamentals
1 Analysis of Algorithms Sartaj Sahni ..............................................................................................................................3
Introduction • Operation Counts • Step Counts • Counting Cache Misses • Asymptotic
Complexity • Recurrence Equations • Amortized Complexity • Practical Complexities •
Acknowledgments • References

2 Basic Structures Dinesh P. Mehta.................................................................................................................................23


Introduction • Arrays • Linked Lists • Stacks and Queues • Acknowledgments • References

3 Trees Dinesh P. Mehta ....................................................................................................................................................35


Introduction • Tree Representation • Binary Trees and Properties • Binary Tree Traversals •
Threaded Binary Trees • Binary Search Trees • Heaps • Tournament Trees • Acknowledgments •
References

4 Graphs Narsingh Deo ....................................................................................................................................................49


Introduction • Graph Representations • Connectivity, Distance, and Spanning Trees • Searching a
Graph • Simple Applications of DFS and BFS • Minimum Spanning Tree • Shortest Paths •
Eulerian and Hamiltonian Graphs • Acknowledgments • References

1
1
Analysis of Algorithms*
1.1 Introduction...................................................................................................................... 3
1.2 Operation Counts............................................................................................................. 4
1.3 Step Counts ....................................................................................................................... 5
1.4 Counting Cache Misses.................................................................................................... 7
A Simple Computer Model • Effect of Cache Misses on Run Time • Matrix Multiplication
1.5 Asymptotic Complexity ................................................................................................... 9
Big Oh Notation (O) • Omega () and Theta () Notations • Little Oh Notation (o)
1.6 Recurrence Equations .................................................................................................... 12
Substitution Method • Table-Lookup Method
1.7 Amortized Complexity................................................................................................... 14
What Is Amortized Complexity? • Maintenance Contract • The McWidget Company •
Subset Generation
1.8 Practical Complexities.................................................................................................... 20
Sartaj Sahni Acknowledgments ..................................................................................................................... 21
University of Florida References................................................................................................................................... 21

1.1 Introduction
The topic “Analysis of Algorithms” is concerned primarily with determining the memory (space) and time requirements
(complexity) of an algorithm. Since the techniques used to determine memory requirements are a subset of those used
to determine time requirements, in this chapter, we focus on the methods used to determine the time complexity of an
algorithm.
The time complexity (or simply, complexity) of an algorithm is measured as a function of the problem size. Some examples
are given below.

1. The complexity of an algorithm to sort n elements may be given as a function of n.


2. The complexity of an algorithm to multiply an m × n matrix and an n × p matrix may be given as a function of m,
n, and p.
3. The complexity of an algorithm to determine whether x is a prime number may be given as a function of the number, n,
of bits in x. Note that n = log2 (x + 1).

We partition our discussion of algorithm analysis into the following sections.

1. Operation counts
2. Step counts
3. Counting cache misses
4. Asymptotic complexity
5. Recurrence equations
6. Amortized complexity
7. Practical complexities

See [1–4] for additional material on algorithm analysis.

* This chapter has been reprinted from first edition of this Handbook, without any content updates.

3
4 Handbook of Data Structures and Applications

1.2 Operation Counts


One way to estimate the time complexity of a program or method is to select one or more operations, such as add, multiply,
and compare, and to determine how many of each is done. The success of this method depends on our ability to identify the
operations that contribute most to the time complexity.

EXAMPLE 1.1
[Max Element] Figure 1.1 gives an algorithm that returns the position of the largest element in the array a[0:n-1].
When n > 0, the time complexity of this algorithm can be estimated by determining the number of comparisons made
between elements of the array a. When n ≤ 1, the for loop is not entered. So no comparisons between elements of a
are made. When n > 1, each iteration of the for loop makes one comparison between two elements of a, and the total
number of element comparisons is n-1. Therefore, the number of element comparisons is max{n-1, 0}. The method max
performs other comparisons (e.g., each iteration of the for loop is preceded by a comparison between i and n) that are
not included in the estimate. Other operations such as initializing positionOfCurrentMax and incrementing the for
loop index i are also not included in the estimate.

int max(int [] a, int n)


{
if (n < 1) return -1; // no max
int positionOfCurrentMax = 0;
for (int i = 1; i < n; i++)
if (a[positionOfCurrentMax] < a[i]) positionOfCurrentMax = i;
return positionOfCurrentMax;
}

FIGURE 1.1 Finding the position of the largest element in a[0:n-1].

The algorithm of Figure 1.1 has the nice property that the operation count is precisely determined by the problem size.
For many other problems, however, this is not so. Figure 1.2 gives an algorithm that performs one pass of a bubble sort. In
this pass, the largest element in a[0:n-1] relocates to position a[n-1]. The number of swaps performed by this algorithm
depends not only on the problem size n but also on the particular values of the elements in the array a. The number of
swaps varies from a low of 0 to a high of n − 1.

void bubble(int [] a, int n)


{
for (int i = 0; i < n - 1; i++)
if (a[i] > a[i+1]) swap(a[i], a[i+1]);
}

FIGURE 1.2 A bubbling pass.

Since the operation count isn’t always uniquely determined by the problem size, we ask for the best, worst, and average
counts.

EXAMPLE 1.2
[SEQUENTIAL SEARCH] Figure 1.3 gives an algorithm that searches a[0:n-1] for the first occurrence of x. The number
of comparisons between x and the elements of a isn’t uniquely determined by the problem size n. For example, if n = 100
and x = a[0], then only 1 comparison is made. However, if x isn’t equal to any of the a[i]s, then 100 comparisons are
made.
A search is successful when x is one of the a[i]s. All other searches are unsuccessful. Whenever we have an unsuccessful
search, the number of comparisons is n. For successful searches the best comparison count is 1, and the worst is n. For the
average count assume that all array elements are distinct and that each is searched for with equal frequency. The average
Analysis of Algorithms 5

count for a successful search is


1
n
i = (n + 1)/2
n
i=1

int sequentialSearch(int [] a, int n, int x)


{
// search a[0:n-1] for x
int i;
for (i = 0; i < n && x != a[i]; i++);
if (i == n) return -1; // not found
else return i;
}

FIGURE 1.3 Sequential search.

EXAMPLE 1.3
[Insertion into a Sorted Array] Figure 1.4 gives an algorithm to insert an element x into a sorted array
a[0:n-1].
We wish to determine the number of comparisons made between x and the elements of a. For the problem size, we
use the number n of elements initially in a. Assume that n ≥ 1. The best or minimum number of comparisons is 1, which
happens when the new element x

void insert(int [] a, int n, int x)


{
// find proper place for x
int i;
for (i = n - 1; i >= 0 && x < a[i]; i--)
a[i+1] = a[i];

a[i+1] = x; // insert x
}

FIGURE 1.4 Inserting into a sorted array.

is to be inserted at the right end. The maximum number of comparisons is n, which happens when x is to be inserted at
the left end. For the average assume that x has an equal chance of being inserted into any of the possible n+1 positions. If
x is eventually inserted into position i+1 of a, i ≥ 0, then the number of comparisons is n-i. If x is inserted into a[0],
the number of comparisons is n. So the average count is
n−1  ⎛ ⎞
1  1 ⎝
n
1 n(n + 1) n n
(n − i) + n = j + n⎠ = +n = +
n+1 n+1 n+1 2 2 n+1
i=0 j=1

This average count is almost 1 more than half the worst-case count.

1.3 Step Counts


The operation-count method of estimating time complexity omits accounting for the time spent on all but the chosen operations.
In the step-count method, we attempt to account for the time spent in all parts of the algorithm. As was the case for operation
counts, the step count is a function of the problem size.
A step is any computation unit that is independent of the problem size. Thus 10 additions can be one step; 100 multiplications
can also be one step; but n additions, where n is the problem size, cannot be one step. The amount of computing represented by
one step may be different from that represented by another. For example, the entire statement
return a+b+b*c+(a+b-c)/(a+b)+4;
6 Handbook of Data Structures and Applications

TABLE 1.1 Best-Case Step Count for Figure 1.3


Statement s/e Frequency Total Steps
int sequentialSearch(··· ) 0 0 0
{ 0 0 0
int i; 1 1 1
for (i = 0; i < n && x != a[i]; i++); 1 1 1
if (i == n) return -1; 1 1 1
else return i; 1 1 1
} 0 0 0
Total 4

TABLE 1.2 Worst-Case Step Count for Figure 1.3


Statement s/e Frequency Total Steps
int sequentialSearch(··· ) 0 0 0
{ 0 0 0
int i; 1 1 1
for (i = 0; i < n && x != a[i]; i++); 1 n+1 n+1
if (i == n) return -1; 1 1 1
else return i; 1 0 0
} 0 0 0
Total n+3

TABLE 1.3 Step Count for Figure 1.3 When x = a[j]


Statement s/e Frequency Total Steps
int sequentialSearch(··· ) 0 0 0
{ 0 0 0
int i; 1 1 1
for (i = 0; i < n && x != a[i]; i++); 1 j+1 j+1
if (i == n) return -1; 1 1 1
else return i; 1 1 1
} 0 0 0
Total j+4

can be regarded as a single step if its execution time is independent of the problem size. We may also count a statement such as
x = y;

as a single step.
To determine the step count of an algorithm, we first determine the number of steps per execution (s/e) of each statement
and the total number of times (i.e., frequency) each statement is executed. Combining these two quantities gives us the total
contribution of each statement to the total step count. We then add the contributions of all statements to obtain the step count
for the entire algorithm.

EXAMPLE 1.4
[Sequential Search] Tables 1.1 and 1.2 show the best- and worst-case step-count analyses for sequentialSearch
(Figure 1.3).
For the average step-count analysis for a successful search, we assume that the n values in a are distinct and that in a
successful search, x has an equal probability of being any one of these values. Under these assumptions the average step
count for a successful search is the sum of the step counts for the n possible successful searches divided by n. To obtain this
average, we first obtain the step count for the case x = a[j] where j is in the range [0, n − 1] (see Table 1.3).
Analysis of Algorithms 7

Now we obtain the average step count for a successful search:

1
n−1
(j + 4) = (n + 7)/2
n
j=0

This value is a little more than half the step count for an unsuccessful search.
Now suppose that successful searches occur only 80% of the time and that each a[i] still has the same probability of
being searched for. The average step count for sequentialSearch is

0.8 ∗ (average count for successful searches) + 0.2 ∗ (count for an unsuccessful search)
= 0.8(n + 7)/2 + 0.2(n + 3)
= 0.6n + 3.4

1.4 Counting Cache Misses


1.4.1 A Simple Computer Model
Traditionally, the focus of algorithm analysis has been on counting operations and steps. Such a focus was justified when com-
puters took more time to perform an operation than they took to fetch the data needed for that operation. Today, however, the
cost of performing an operation is significantly lower than the cost of fetching data from memory. Consequently, the run time of
many algorithms is dominated by the number of memory references (equivalently, number of cache misses) rather than by the
number of operations. Hence, algorithm designers focus on reducing not only the number of operations but also the number of
memory accesses. Algorithm designers focus also on designing algorithms that hide memory latency.
Consider a simple computer model in which the computer’s memory consists of an L1 (level 1) cache, an L2 cache, and main
memory. Arithmetic and logical operations are performed by the arithmetic and logic unit (ALU) on data resident in registers
(R). Figure 1.5 gives a block diagram for our simple computer model.
Typically, the size of main memory is tens or hundreds of megabytes; L2 cache sizes are typically a fraction of a megabyte; L1
cache is usually in the tens of kilobytes; and the number of registers is between 8 and 32. When you start your program, all your
data are in main memory.
To perform an arithmetic operation such as an add, in our computer model, the data to be added are first loaded from memory
into registers, the data in the registers are added, and the result is written to memory.
Let one cycle be the length of time it takes to add data that are already in registers. The time needed to load data from L1 cache
to a register is two cycles in our model. If the required data are not in L1 cache but are in L2 cache, we get an L1 cache miss and
the required data are copied from L2 cache to L1 cache and the register in 10 cycles. When the required data are not in L2 cache
either, we have an L2 cache miss and the required data are copied from main memory into L2 cache, L1 cache, and the register in
100 cycles. The write operation is counted as one cycle even when the data are written to main memory because we do not wait
for the write to complete before proceeding to the next operation. For more details on cache organization, see [5].

1.4.2 Effect of Cache Misses on Run Time


For our simple model, the statement a = b + c is compiled into the computer instructions
load a; load b; add; store c;

where the load operations load data into registers and the store operation writes the result of the add to memory. The add
and the store together take two cycles. The two loads may take anywhere from 4 cycles to 200 cycles depending on whether
we get no cache miss, L1 misses, or L2 misses. So the total time for the statement a = b + c varies from 6 cycles to 202 cycles.
In practice, the variation in time is not as extreme because we can overlap the time spent on successive cache misses.

ALU
main
L2 memory
R L1

FIGURE 1.5 A simple computer model.


8 Handbook of Data Structures and Applications

Suppose that we have two algorithms that perform the same task. The first algorithm does 2000 adds that require 4000 load,
2000 add, and 2000 store operations and the second algorithm does 1000 adds. The data access pattern for the first algorithm
is such that 25% of the loads result in an L1 miss and another 25% result in an L2 miss. For our simplistic computer model, the
time required by the first algorithm is 2000 ∗ 2 (for the 50% loads that cause no cache miss) + 1000 ∗ 10 (for the 25% loads that
cause an L1 miss) + 1000 ∗ 100 (for the 25% loads that cause an L2 miss) + 2000 ∗ 1 (for the adds) + 2000 ∗ 1 (for the stores)
= 118,000 cycles. If the second algorithm has 100% L2 misses, it will take 2000 ∗ 100 (L2 misses) + 1000 ∗ 1 (adds) + 1000 ∗ 1
(stores) = 202,000 cycles. So the second algorithm, which does half the work done by the first, actually takes 76% more time
than is taken by the first algorithm.
Computers use a number of strategies (such as preloading data that will be needed in the near future into cache, and when a
cache miss occurs, the needed data as well as data in some number of adjacent bytes are loaded into cache) to reduce the number
of cache misses and hence reduce the run time of a program. These strategies are most effective when successive computer
operations use adjacent bytes of main memory.
Although our discussion has focused on how cache is used for data, computers also use cache to reduce the time needed to
access instructions.

1.4.3 Matrix Multiplication


The algorithm of Figure 1.6 multiplies two square matrices that are represented as two-dimensional arrays. It performs the fol-
lowing computation:
n
c[i][j] = a[i][k] ∗ b[k][j], 1 ≤ i ≤ n, 1 ≤ j ≤ n (1.1)
k=1

Figure 1.7 is an alternative algorithm that produces the same two-dimensional array c as is produced by Figure 1.6. We observe
that Figure 1.7 has two nested for loops that are not present in Figure 1.6 and does more work than is done by Figure 1.6 with
respect to indexing into the array c. The remainder of the work is the same.
You will notice that if you permute the order of the three nested for loops in Figure 1.7, you do not affect the result array c.
We refer to the loop order in Figure 1.7 as ijk order. When we swap the second and third for loops, we get ikj order. In all,
there are 3! = 6 ways in which we can order the three nested for loops. All six orderings result in methods that perform exactly

void squareMultiply(int [][] a, int [][] b, int [][] c, int n)


{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
{
int sum = 0;
for (int k = 0; k < n; k++)
sum += a[i][k] * b[k][j];
c[i][j] = sum;
}
}

FIGURE 1.6 Multiply two n × n matrices.

void fastSquareMultiply(int [][] a, int [][] b, int [][] c, int n)


{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
c[i][j] = 0;

for (int i = 0; i < n; i++)


for (int j = 0; j < n; j++)
for (int k = 0; k < n; k++)
c[i][j] += a[i][k] * b[k][j];
}

FIGURE 1.7 Alternative algorithm to multiply square matrices.


Another random document with
no related content on Scribd:
What shall we do for those who are shipwrecked in faith, bankrupt in
intellect, but ... who seek comfort in the mirage of spiritualism, the
delusions of transcendentalism, or the will o’ the wisp of
mesmerism?...”
The ignis fatuus, now so favorite an image with many dwarf
philosophers, had itself to struggle for recognition. It is not so long
since the now familiar phenomenon was stoutly denied by a
correspondent of the London Times, whose assertions carried
weight, till the work of Dr. Phipson, supported by the testimony of
Beccaria, Humboldt, and other naturalists, set the question at
rest.[164] The Positivists should choose some happier expression,
and follow the discoveries of science at the same time. As to
mesmerism, it has been adopted in many parts of Germany, and is
publicly used with undeniable success in more than one hospital; its
occult properties have been proved and are believed in by
physicians, whose eminence, learning, and merited fame, the self-
complacent lecturer on mediums and insanity cannot well hope to
equal.
We have to add but a few more words before we drop this
unpleasant subject. We have found Positivists particularly happy in
the delusion that the greatest scientists of Europe were Comtists.
How far their claims may be just, as regards other savants, we do
not know, but Huxley, whom all Europe considers one of her greatest
scientists, most decidedly declines that honor, and Dr. Maudsley, of
London, follows suit. In a lecture delivered by the former gentleman
in 1868, in Edinburg, on The Physical Basis of Life, he even appears
to be very much shocked at the liberty taken by the Archbishop of
York, in identifying him with Comte’s philosophy. “So far as I am
concerned,” says Mr. Huxley, “the most reverend prelate might
dialectically hew Mr. Comte in pieces, as a modern Agag, and I
would not attempt to stay his hand. In so far as my study of what
specially characterizes the positive philosophy has led me, I find,
therein, little or nothing of any scientific value, and a great deal which
is as thoroughly antagonistic to the very essence of science as
anything in ultramontane Catholicism. In fact, Comte’s philosophy in
practice might be compendiously described as Catholicism minus
Christianity.” Further, Huxley even becomes wrathful, and falls to
accusing Scotchmen of ingratitude for having allowed the Bishop to
mistake Comte for the founder of a philosophy which belonged by
right to Hume. “It was enough,” exclaims the professor, “to make
David Hume turn in his grave, that here, almost within earshot of his
house, an interested audience should have listened, without a
murmur, whilst his most characteristic doctrines were attributed to a
French writer of fifty years later date, in whose dreary and verbose
pages we miss alike the vigor of thought and the clearness of
style....”[165]
Poor Comte! It appears that the highest representatives of his
philosophy are now reduced, at least in this country, to “one
physicist, one physician who has made a specialty of nervous
diseases, and one lawyer.” A very witty critic nicknamed this
desperate trio, “an anomalistic triad, which, amid its arduous labors,
finds no time to acquaint itself with the principles and laws of their
language.”[166]
To close the question, the Positivists neglect no means to
overthrow Spiritualism in favor of their religion. Their high priests are
made to blow their trumpets untiringly; and though the walls of no
modern Jericho are ever likely to tumble down in dust before their
blast, still they neglect no means to attain the desired object. Their
paradoxes are unique, and their accusations against spiritualists
irresistible in logic. In a recent lecture, for instance, it was remarked
that: “The exclusive exercise of religious instinct is productive of
sexual immorality. Priests, monks, nuns, saints, media, ecstatics,
and devotees are famous for their impurities.”[167]
We are happy to remark that, while Positivism loudly proclaims
itself a religion, Spiritualism has never pretended to be anything
more than a science, a growing philosophy, or rather a research in
hidden and as yet unexplained forces in nature. The objectiveness of
its various phenomena has been demonstrated by more than one
genuine representative of science, and as ineffectually denied by her
“monkeys.”
Finally, it may be remarked of our Positivists who deal so
unceremoniously with every psychological phenomenon, that they
are like Samuel Butler’s rhetorician, who

“ ... could not ope


His mouth, but out there flew a trope.”

We would there were no occasion to extend the critic’s glance


beyond the circle of triflers and pedants who improperly wear the title
of men of science. But it is also undeniable that the treatment of new
subjects by those whose rank is high in the scientific world but too
often passes unchallenged, when it is amenable to censure. The
cautiousness bred of a fixed habit of experimental research, the
tentative advance from opinion to opinion, the weight accorded to
recognized authorities—all foster a conservatism of thought which
naturally runs into dogmatism. The price of scientific progress is too
commonly the martyrdom or ostracism of the innovator. The reformer
of the laboratory must, so to speak, carry the citadel of custom and
prejudice at the point of the bayonet. It is rare that even a postern-
door is left ajar by a friendly hand. The noisy protests and
impertinent criticisms of the little people of the antechamber of
science, he can afford to let pass unnoticed; the hostility of the other
class is a real peril that the innovator must face and overcome.
Knowledge does increase apace, but the great body of scientists are
not entitled to the credit. In every instance they have done their best
to shipwreck the new discovery, together with the discoverer. The
palm is to him who has won it by individual courage, intuitiveness,
and persistency. Few are the forces in nature which, when first
announced, were not laughed at, and then set aside as absurd and
unscientific. Humbling the pride of those who had not discovered
anything, the just claims of those who have been denied a hearing
until negation was no longer prudent, and then—alas for poor, selfish
humanity! these very discoverers too often became the opponents
and oppressors, in their turn, of still more recent explorers in the
domain of natural law! So, step by step, mankind move around their
circumscribed circle of knowledge, science constantly correcting its
mistakes, and readjusting on the following day the erroneous
theories of the preceding one. This has been the case, not merely
with questions pertaining to psychology, such as mesmerism, in its
dual sense of a physical and spiritual phenomenon, but even with
such discoveries as directly related to exact sciences, and have
been easy to demonstrate.
What can we do? Shall we recall the disagreeable past? Shall we
point to mediæval scholars conniving with the clergy to deny the
Heliocentric theory, for fear of hurting an ecclesiastical dogma? Must
we recall how learned conchologists once denied that the fossil
shells, found scattered over the face of the earth, were ever
inhabited by living animals at all? How the naturalists of the
eighteenth century declared these but mere fac-similes of animals?
And how these naturalists fought and quarrelled and battled and
called each other names, over these venerable mummies of the
ancient ages for nearly a century, until Buffon settled the question by
proving to the negators that they were mistaken? Surely an oyster-
shell is anything but transcendental, and ought to be quite a palpable
subject for any exact study; and if the scientists could not agree on
that, we can hardly expect them to believe at all that evanescent
forms,—of hands, faces, and whole bodies sometimes—appear at
the seances of spiritual mediums, when the latter are honest.
There exists a certain work which might afford very profitable
reading for the leisure hours of skeptical men of science. It is a book
published by Flourens, the Perpetual Secretary of the French
Academy, called Histoire des Recherches de Buffon. The author
shows in it how the great naturalist combated and finally conquered
the advocates of the fac-simile theory; and how they still went on
denying everything under the sun, until at times the learned body fell
into a fury, an epidemic of negation. It denied Franklin and his
refined electricity; laughed at Fulton and his concentrated steam;
voted the engineer Perdonnet a strait-jacket for his offer to build
railroads; stared Harvey out of countenance; and proclaimed
Bernard de Palissy “as stupid as one of his own pots!”
In his oft-quoted work, Conflict between Religion and Science,
Professor Draper shows a decided propensity to kick the beam of
the scales of justice, and lay all such impediments to the progress of
science at the door of the clergy alone. With all respect and
admiration due to this eloquent writer and scientist, we must protest
and give every one his just due. Many of the above-enumerated
discoveries are mentioned by the author of the Conflict. In every
case he denounces the bitter resistance on the part of the clergy,
and keeps silent on the like opposition invariably experienced by
every new discoverer at the hands of science. His claim on behalf of
science that “knowledge is power” is undoubtedly just. But abuse of
power, whether it proceeds from excess of wisdom or ignorance is
alike obnoxious in its effects. Besides, the clergy are silenced now.
Their protests would at this day be scarcely noticed in the world of
science. But while theology is kept in the background, the scientists
have seized the sceptre of despotism with both hands, and they use
it, like the cherubim and flaming sword of Eden, to keep the people
away from the tree of immortal life and within this world of perishable
matter.
The editor of the London Spiritualist, in answer to Dr. Gully’s
criticism of Mr. Tyndall’s fire-mist theory, remarks that if the entire
body of spiritualists are not roasting alive at Smithfield in the present
century, it is to science alone that we are indebted for this crowning
mercy. Well, let us admit that the scientists are indirectly public
benefactors in this case, to the extent that the burning of erudite
scholars is no longer fashionable. But is it unfair to ask whether the
disposition manifested toward the spiritualistic doctrine by Faraday,
Tyndall, Huxley, Agassiz, and others, does not warrant the suspicion
that if these learned gentlemen and their following had the unlimited
power once held by the Inquisition, spiritualists would not have
reason to feel as easy as they do now? Even supposing that they
should not roast believers in the existence of a spirit-world—it being
unlawful to cremate people alive—would they not send every
spiritualist they could to Bedlam? Do they not call us “incurable
monomaniacs,” “hallucinated fools,” “fetich-worshippers,” and like
characteristic names? Really, we cannot see what should have
stimulated to such extent the gratitude of the editor of the London
Spiritualist, for the benevolent tutelage of the men of science. We
believe that the recent Lankester-Donkin-Slade prosecution in
London ought at last to open the eyes of hopeful spiritualists, and
show them that stubborn materialism is often more stupidly bigoted
than religious fanaticism itself.
One of the cleverest productions of Professor Tyndall’s pen is his
caustic essay upon Martineau and Materialism. At the same time it is
one which in future years the author will doubtless be only too ready
to trim of certain unpardonable grossnesses of expression. For the
moment, however, we will not deal with these, but consider what he
has to say of the phenomenon of consciousness. He quotes this
question from Mr. Martineau: “A man can say ‘I feel, I think, I love;’
but how does consciousness infuse itself into the problem?” And
thus answers: “The passage from the physics of the brain to the
corresponding facts of consciousness is unthinkable. Granted that a
definite thought and a molecular action in the brain occur
simultaneously; we do not possess the intellectual organ nor
apparently any rudiments of the organ, which would enable us to
pass by a process of reasoning from one to the other. They appear
together, but we do not know why. Were our minds and senses so
expanded, strengthened and illuminated, as to enable us to see and
feel the very molecules of the brain; were we capable of following all
their motions, all their groupings, all their electric discharges, if such
there be; and were we intimately acquainted with the corresponding
states of thought and feeling, we should be as far as ever from the
solution of the problem, ‘How are these physical processes
connected with the facts of consciousness?’ The chasm between the
two classes of phenomena would still remain intellectually
impassable.”[168]
This chasm, as impassable to Professor Tyndall as the fire-mist
where the scientist is confronted with his unknowable cause, is a
barrier only to men without spiritual intuitions. Professor Buchanan’s
Outlines of Lectures on the Neurological System of Anthropology, a
work written so far back as 1854, contains suggestions that, if the
sciolists would only heed them, would show how a bridge can be
thrown across this dreadful abyss. It is one of the bins in which the
thought-seed of future harvests is stored up by a frugal present. But
the edifice of materialism is based entirely upon that gross sub-
structure—the reason. When they have stretched its capabilities to
their utmost limits, its teachers can at best only disclose to us an
universe of molecules animated by an occult impulse. What better
diagnosis of the ailment of our scientists could be asked than can be
derived from Professor Tyndall’s analysis of the mental state of the
Ultramontane clergy by a very slight change of names. For “spiritual
guides” read “scientists,” for “prescientific past” substitute
“materialistic present,” say “spirit” for “science,” and in the following
paragraph we have a life portrait of the modern man of science
drawn by the hand of a master:
“ ... Their spiritual guides live so exclusively in the prescientific
past, that even the really strong intellects among them are reduced
to atrophy as regards scientific truth. Eyes they have and see not;
ears they have and hear not; for both eyes and ears are taken
possession of by the sights and sounds of another age. In relation to
science, the Ultramontane brain, through lack of exercise, is virtually
the undeveloped brain of the child. And thus it is that as children in
scientific knowledge, but as potent wielders of spiritual power among
the ignorant, they countenance and enforce practices sufficient to
bring the blush of shame to the cheeks of the more intelligent among
themselves.”[169] The Occultist holds this mirror up to science that it
may see how it looks itself.
Since history recorded the first laws established by man, there
never was yet a people, whose code did not hang the issues of the
life and death of its citizens upon the testimony of two or three
credible witnesses. “At the mouth of two witnesses, or three
witnesses, shall he that is worthy of death be put to death,”[170] says
Moses, the first legislator we meet in ancient history. “The laws
which put to death a man on the deposition of one witness are fatal
to freedom” says Montesquieu. “Reason claims there should be two
witnesses.”[171]
Thus the value of evidence has been tacitly agreed upon and
accepted in every country. But the scientists will not accept the
evidence of the million against one. In vain do hundreds of
thousands of men testify to facts. Oculos habent et non vident! They
are determined to remain blind and deaf. Thirty years of practical
demonstrations and the testimony of some millions of believers in
America and Europe are certainly entitled to some degree of respect
and attention. Especially so, when the verdict of twelve spiritualists,
influenced by the evidence testified to by any two others, is
competent to send even a scientist to swing on the gallows for a
crime, perhaps committed under the impulse supplied by a
commotion among the cerebral molecules unrestrained by a
consciousness of future moral retribution.
Toward science as a whole, as a divine goal, the whole civilized
world ought to look with respect and veneration; for science alone
can enable man to understand the Deity by the true appreciation of
his works. “Science is the understanding of truth or facts,” says
Webster; “it is an investigation of truth for its own sake and a pursuit
of pure knowledge.” If the definition be correct, then the majority of
our modern scholars have proved false to their goddess. “Truth for
its own sake!” And where should the keys to every truth in nature be
searched for, unless in the hitherto unexplored mystery of
psychology? Alas! that in questioning nature so many men of
science should daintily sort over her facts and choose only such for
study as best bolster their prejudices.
Psychology has no worse enemies than the medical school
denominated allopathists. It is in vain to remind them that of the so-
called exact sciences, medicine, confessedly, least deserves the
name. Although of all branches of medical knowledge, psychology
ought more than any other to be studied by physicians, since without
its help their practice degenerates into mere guess-work and
chance-intuitions, they almost wholly neglect it. The least dissent
from their promulgated doctrines is resented as a heresy, and though
an unpopular and unrecognized curative method should be shown to
save thousands, they seem, as a body, disposed to cling to accepted
hypotheses and prescriptions, and decry both innovator and
innovation until they get the mint-stamp of regularity. Thousands of
unlucky patients may die meanwhile, but so long as professional
honor is vindicated, this is a matter of secondary importance.
Theoretically the most benignant, at the same time no other school
of science exhibits so many instances of petty prejudice,
materialism, atheism, and malicious stubbornness as medicine. The
predilections and patronage of the leading physicians are scarcely
ever measured by the usefulness of a discovery. Bleeding, by
leeching, cupping, and the lancet, had its epidemic of popularity, but
at last fell into merited disgrace; water, now freely given to fevered
patients, was once denied them, warm baths were superseded by
cold water, and for a while hydropathy was a mania. Peruvian bark—
which a modern defender of biblical authority seriously endeavors to
identify with the paradisiacal “Tree of Life,”[172] and which was
brought to Spain in 1632—was neglected for years. The Church, for
once, showed more discrimination than science. At the request of
Cardinal de Lugo, Innocent X. gave it the prestige of his powerful
name.
In an old book entitled Demonologia, the author cites many
instances of important remedies which being neglected at first
afterward rose into notice through mere accident. He also shows that
most of the new discoveries in medicine have turned out to be no
more than “the revival and reädoption of very ancient practices.”
During the last century, the root of the male fern was sold and widely
advertised as a secret nostrum by a Madame Nouffleur, a female
quack, for the effective cure of the tapeworm. The secret was bought
by Louis XV. for a large sum of money; after which the physicians
discovered that it was recommended and administered in that
disease by Galen. The famous powder of the Duke of Portland for
the gout, was the diacentaureon of Cælius Aurelianus. Later it was
ascertained that it had been used by the earliest medical writers,
who had found it in the writings of the old Greek philosophers. So
with the eau medicinale of Dr. Husson, whose name it bears. This
famous remedy for the gout was recognized under its new mask to
be the Colchicum autumnale, or meadow saffron, which is identical
with a plant called Hermodactylus, whose merits as a certain
antidote to gout were recognized and defended by Oribasius, a great
physician of the fourth century, and Ætius Amidenus, another
eminent physician of Alexandria (fifth century). Subsequently it was
abandoned and fell into disfavor only because it was too old to be
considered good by the members of the medical faculties that
flourished toward the end of the last century!
Even the great Magendie, the wise physiologist, was not above
discovering that which had already been discovered and found good
by the oldest physicians. His proposed remedy against consumption,
namely, the use of prussic acid, may be found in the works of
Lumæus, Amenitates Academicæ, vol. iv., in which he shows
distilled laurel water to have been used with great profit in pulmonary
consumption. Pliny also assures us that the extract of almonds and
cherry-pits had cured the most obstinate coughs. As the author of
Demonologia well remarks, it may be asserted with perfect safety
that “all the various secret preparations of opium which have been
lauded as the discovery of modern times, may be recognized in the
works of ancient authors,” who see themselves so discredited in our
days.
It is admitted on all hands that from time immemorial the distant
East was the land of knowledge. Not even in Egypt were botany and
mineralogy so extensively studied as by the savants of archaic
Middle Asia. Sprengel, unjust and prejudiced as he shows himself in
everything else, confesses this much in his Histoire de la Médecine.
And yet, notwithstanding this, whenever the subject of magic is
discussed, that of India has rarely suggested itself to any one, for of
its general practice in that country less is known than among any
other ancient people. With the Hindus it was and is more esoteric, if
possible, than it was even among the Egyptian priests. So sacred
was it deemed that its existence was only half admitted, and it was
only practiced in public emergencies. It was more than a religious
matter, for it was considered divine. The Egyptian hierophants,
notwithstanding the practice of a stern and pure morality, could not
be compared for one moment with the ascetical Gymnosophists,
either in holiness of life or miraculous powers developed in them by
the supernatural adjuration of everything earthly. By those who knew
them well they were held in still greater reverence than the magians
of Chaldea. Denying themselves the simplest comforts of life, they
dwelt in woods, and led the life of the most secluded hermits,[173]
while their Egyptian brothers at least congregated together.
Notwithstanding the slur thrown by history on all who practiced
magic and divination, it has proclaimed them as possessing the
greatest secrets in medical knowledge and unsurpassed skill in its
practice. Numerous are the volumes preserved in Hindu convents, in
which are recorded the proofs of their learning. To attempt to say
whether these Gymnosophists were the real founders of magic in
India, or whether they only practiced what had passed to them as an
inheritance from the earliest Rishis[174]—the seven primeval sages—
would be regarded as a mere speculation by exact scholars. “The
care which they took in educating youth, in familiarizing it with
generous and virtuous sentiments, did them peculiar honor, and their
maxims and discourses, as recorded by historians, prove that they
were expert in matters of philosophy, metaphysics, astronomy,
morality, and religion,” says a modern writer. They preserved their
dignity under the sway of the most powerful princes, whom they
would not condescend to visit, or to trouble for the slightest favor. If
the latter desired the advice or the prayers of the holy men, they
were either obliged to go themselves, or to send messengers. To
these men no secret power of either plant or mineral was unknown.
They had fathomed nature to its depths, while psychology and
physiology were to them open books, and the result was that science
or machagiotia that is now termed, so superciliously, magic.
While the miracles recorded in the Bible have become accepted
facts with the Christians, to disbelieve which is regarded as infidelity,
the narratives of wonders and prodigies found in the Atharva-
Veda,[175] either provoke their contempt or are viewed as evidences
of diabolism. And yet, in more than one respect, and notwithstanding
the unwillingness of certain Sanscrit scholars, we can show the
identity between the two. Moreover, as the Vedas have now been
proved by scholars to antedate the Jewish Bible by many ages, the
inference is an easy one that if one of them has borrowed from the
other, the Hindu sacred books are not to be charged with plagiarism.
First of all, their cosmogony shows how erroneous has been the
opinion prevalent among the civilized nations that Brahma was ever
considered by the Hindus their chief or Supreme God. Brahma is a
secondary deity, and like Jehovah is “a mover of the waters.” He is
the creating god, and has in his allegorical representations four
heads, answering to the four cardinal points. He is the demiurgos,
the architect of the world. “In the primordiate state of the creation,”
says Polier’s Mythologie des Indous, “the rudimental universe,
submerged in water, reposed in the bosom of the Eternal. Sprang
from this chaos and darkness, Brahma, the architect of the world,
poised on a lotus-leaf floated (moved?) upon the waters, unable to
discern anything but water and darkness.” This is as identical as
possible with the Egyptian cosmogony, which shows in its opening
sentences Athtor[176] or Mother Night (which represents illimitable
darkness) as the primeval element which covered the infinite abyss,
animated by water and the universal spirit of the Eternal, dwelling
alone in Chaos. As in the Jewish Scriptures, the history of the
creation opens with the spirit of God and his creative emanation—
another Deity.[177] Perceiving such a dismal state of things, Brahma
soliloquizes in consternation: “Who am I? Whence came I?” Then he
hears a voice: “Direct your prayer to Bhagavant—the Eternal, known,
also, as Parabrahma.” Brahma, rising from his natatory position,
seats himself upon the lotus in an attitude of contemplation, and
reflects upon the Eternal, who, pleased with this evidence of piety,
disperses the primeval darkness and opens his understanding. “After
this Brahma issues from the universal egg—(infinite chaos) as light,
for his understanding is now opened, and he sets himself to work; he
moves on the eternal waters, with the spirit of God within himself; in
his capacity of mover of the waters he is Narayana.”
The lotus, the sacred flower of the Egyptians, as well as the
Hindus, is the symbol of Horus as it is that of Brahma. No temples in
Thibet or Nepaul are found without it; and the meaning of this symbol
is extremely suggestive. The sprig of lilies placed in the hand of the
archangel, who offers them to the Virgin Mary, in the pictures of the
“Annunciation,” have in their esoteric symbolism precisely the same
meaning. We refer the reader to Sir William Jones.[178] With the
Hindus, the lotus is the emblem of the productive power of nature,
through the agency of fire and water (spirit and matter). “Eternal!”
says a verse in the Bhagaveda Gita, “I see Brahma the creator
enthroned in thee above the lotus!” and Sir W. Jones shows that the
seeds of the lotus contain—even before they germinate—perfectly-
formed leaves, the miniature shapes of what one day, as perfected
plants, they will become; or, as the author of The Heathen Religion,
has it—“nature thus giving us a specimen of preformation of its
productions;” adding further that “the seed of all phœnogamous
plants bearing proper flowers, contain an embryo plantlet ready
formed.”[179]
With the Buddhists, it has the same signification. Maha-Maya, or
Maha-Deva, the mother of Gautama Bhudda, had the birth of her
son announced to her by Bhôdisât (the spirit of Buddha), who
appeared beside her couch with a lotus in his hand. Thus, also,
Osiris and Horus are represented by the Egyptians constantly in
association with the lotus-flower.
These facts all go to show the identical parentage of this idea in
the three religious systems, Hindu, Egyptian and Judaico-Christian.
Wherever the mystic water-lily (lotus) is employed, it signifies the
emanation of the objective from the concealed, or subjective—the
eternal thought of the ever-invisible Deity passing from the abstract
into the concrete or visible form. For as soon as darkness was
dispersed and “there was light,” Brahma’s understanding was
opened, and he saw in the ideal world (which had hitherto lain
eternally concealed in the Divine thought) the archetypal forms of all
the infinite future things that would be called into existence, and
hence become visible. At this first stage of action, Brahma had not
yet become the architect, the builder of the universe, for he had, like
the architect, to first acquaint himself with the plan, and realize the
ideal forms which were buried in the bosom of the Eternal One, as
the future lotus-leaves are concealed within the seed of that plant.
And it is in this idea that we must look for the origin and explanation
of the verse in the Jewish cosmogony, which reads: “And God said,
Let the earth bring forth ... the fruit-tree yielding fruit after his kind,
whose seed is in itself.” In all the primitive religions, the “Son of the
Father” is the creative God—i.e., His thought made visible; and
before the Christian era, from the Trimurti of the Hindus down to the
three kabalistic heads of the Jewish-explained scriptures, the triune
godhead of each nation was fully defined and substantiated in its
allegories. In the Christian creed we see but the artificial engrafting
of a new branch upon the old trunk; and the adoption by the Greek
and Roman churches of the lily-symbol held by the archangel at the
moment of the Annunciation, shows a thought of precisely the same
metaphysical significance.
The lotus is the product of fire (heat) and water, hence the dual
symbol of spirit and matter. The God Brahma is the second person of
the Trinity, as are Jehovah (Adam-Kadmon) and Osiris, or rather
Pimander, or the Power of the Thought Divine, of Hermes; for it is
Pimander who represents the root of all the Egyptian Sun-gods. The
Eternal is the Spirit of Fire, which stirs up and fructifies and develops
into a concrete form everything that is born of water or the primordial
earth, evolved out of Brahma; but the universe is itself Brahma, and
he is the universe. This is the philosophy of Spinoza, which he
derived from that of Pythagoras; and it is the same for which Bruno
died a martyr. How much Christian theology has gone astray from its
point of departure, is demonstrated in this historical fact. Bruno was
slaughtered for the exegesis of a symbol that was adopted by the
earliest Christians, and expounded by the apostles! The sprig of
water-lilies of Bhôdisât, and later of Gabriel, typifying fire and water,
or the idea of creation and generation, is worked into the earliest
dogma of the baptismal sacrament.
Bruno’s and Spinoza’s doctrines are nearly identical, though the
words of the latter are more veiled, and far more cautiously chosen
than those to be found in the theories of the author of the Causa
Principio et Uno, or the Infinito Universo e Mondi. Both Bruno, who
confesses that the source of his information was Pythagoras, and
Spinoza, who, without acknowledging it as frankly, allows his
philosophy to betray the secret, view the First Cause from the same
standpoint. With them, God is an Entity totally per se, an Infinite
Spirit, and the only Being utterly free and independent of either
effects or other causes; who, through that same Will which produced
all things and gave the first impulse to every cosmic law, perpetually
keeps in existence and order everything in the universe. As well as
the Hindu Swâbhávikas, erroneously called Atheists, who assume
that all things, men as well as gods and spirits, were born from
Swabhâva, or their own nature,[180] both Spinoza and Bruno were
led to the conclusion that God is to be sought for within nature and
not without. For, creation being proportional to the power of the
Creator, the universe as well as its Creator must be infinite and
eternal, one form emanating from its own essence, and creating in
its turn another. The modern commentators affirm that Bruno,
“unsustained by the hope of another and better world, still
surrendered his life rather than his convictions;” thereby allowing it to
be inferred that Giordano Bruno had no belief in the continued
existence of man after death. Professor Draper asserts most
positively that Bruno did not believe in the immortality of the soul.
Speaking of the countless victims of the religious intolerance of the
Popish Church, he remarks: “The passage from this life to the next,
though through a hard trial, was the passage from a transient trouble
to eternal happiness.... On his way through the dark valley, the
martyr believed that there was an invisible hand that would lead
him.... For Bruno there was no such support. The philosophical
opinions, for the sake of which he surrendered his life, could give
him no consolation.”[181]
But Professor Draper seems to have a very superficial knowledge
of the true belief of the philosophers. We can leave Spinoza out of
the question, and even allow him to remain in the eyes of his critics
an utter atheist and materialist; for the cautious reserve which he
placed upon himself in his writings makes it extremely difficult for
one who does not read him between the lines, and is not thoroughly
acquainted with the hidden meaning of the Pythagorean
metaphysics, to ascertain what his real sentiments were. But as for
Giordano Bruno, if he adhered to the doctrines of Pythagoras he
must have believed in another life, hence, he could not have been an
atheist whose philosophy offered him no such “consolation.” His
accusation and subsequent confession, as given by Professor
Domenico Berti, in his Life of Bruno, and compiled from original
documents recently published, prove beyond doubt what were his
real philosophy, creed and doctrines. In common with the
Alexandrian Platonists, and the later Kabalists, he held that Jesus
was a magician in the sense given to this appellation by Porphyry
and Cicero, who call it the divina sapientia (divine knowledge), and
by Philo Judæus, who described the Magi as the most wonderful
inquirers into the hidden mysteries of nature, not in the degrading
sense given to the word magic in our century. In his noble
conception, the Magi were holy men, who, setting themselves apart
from everything else on this earth, contemplated the divine virtues
and understood the divine nature of the gods and spirits, the more
clearly; and so, initiated others into the same mysteries, which
consist in one holding an uninterrupted intercourse with these
invisible beings during life. But we will show Bruno’s inmost
philosophical convictions better by quoting fragments from the
accusation and his own confession.
The charges in the denunciation of Mocenigo, his accuser, are
expressed in the following terms:
“I, Zuane Mocenigo, son of the most illustrious Ser Marcantonio,
denounce to your very reverend fathership, by constraint of my
conscience and by order of my confessor, that I have heard say by
Giordano Bruno, several times when he discoursed with me in my
house, that it is great blasphemy in Catholics to say that the bread
transubstantiates itself into flesh; that he is opposed to the Mass;
that no religion pleases him; that Christ was a wretch (un tristo), and
that if he did wicked works to seduce the people he might well
predict that He ought to be impaled; that there is no distinction of
persons in God, and that it would be imperfection in God; that the
world is eternal, and that there are infinite worlds, and that God
makes them continually, because, he says, He desires all He can;
that Christ did apparent miracles and was a magician, and so were
the apostles, and that he had a mind to do as much and more than
they did; that Christ showed an unwillingness to die, and shunned
death all He could; that there is no punishment of sin, and that souls
created by the operation of nature pass from one animal to another,
and that as the brute animals are born of corruption, so also are men
when after dissolution they come to be born again.”
Perfidious as they are, the above words plainly indicate the belief
of Bruno in the Pythagorean metempsychosis, which, misunderstood
as it is, still shows a belief in the survival of man in one shape or
another. Further, the accuser says:
“He has shown indications of wishing to make himself the author
of a new sect, under the name of ‘New Philosophy.’ He has said that
the Virgin could not have brought forth, and that our Catholic faith is
all full of blasphemies against the majesty of God; that the monks
ought to be deprived of the right of disputation and their revenues,
because they pollute the world; that they are all asses, and that our
opinions are doctrines of asses; that we have no proof that our faith
has merit with God, and that not to do to others what we would not
have done to ourselves suffices for a good life, and that he laughs at
all other sins, and wonders how God can endure so many heresies
in Catholics. He says that he means to apply himself to the art of
divination, and make all the world run after him; that St. Thomas and
all the Doctors knew nothing to compare with him, and that he could
ask questions of all the first theologians of the world that they could
not answer.”
To this, the accused philosopher answered by the following
profession of faith, which is that of every disciple of the ancient
masters:
“I hold, in brief, to an infinite universe, that is, an effect of infinite
divine power, because I esteemed it a thing unworthy of divine
goodness and power, that, being able to produce besides this world
another and infinite others, it should produce a finite world. Thus I
have declared that there are infinite particular worlds similar to this of
the earth, which, with Pythagoras, I understand to be a star similar in
nature with the moon, the other planets, and the other stars, which
are infinite; and that all those bodies are worlds, and without number,
which thus constitute the infinite universality in an infinite space, and
this is called the infinite universe, in which are innumerable worlds,
so that there is a double kind of infinite greatness in the universe,
and of a multitude of worlds. Indirectly, this may be understood to be
repugnant to the truth according to the true faith.
“Moreover, I place in this universe a universal Providence, by
virtue of which everything lives, vegetates and moves, and stands in
its perfection, and I understand it in two ways; one, in the mode in
which the whole soul is present in the whole and every part of the
body, and this I call nature, the shadow and footprint of divinity; the
other, the ineffable mode in which God, by essence, presence, and
power, is in all and above all, not as part, not as soul, but in mode
inexplicable.
“Moreover, I understand all the attributes in divinity to be one and
the same thing. Together with the theologians and great
philosophers, I apprehend three attributes, power, wisdom, and
goodness, or, rather, mind, intellect, love, with which things have
first, being, through the mind; next, ordered and distinct being,
through the intellect; and third, concord and symmetry, through love.
Thus I understand being in all and over all, as there is nothing
without participation in being, and there is no being without essence,
just as nothing is beautiful without beauty being present; thus
nothing can be free from the divine presence, and thus by way of
reason, and not by way of substantial truth, do I understand
distinction in divinity.
“Assuming then the world caused and produced, I understand that,
according to all its being, it is dependent upon the first cause, so that
it did not reject the name of creation, which I understand that
Aristotle also has expressed, saying, ‘God is that upon whom the
world and all nature depends,’ so that according to the explanation of
St. Thomas, whether it be eternal or in time, it is, according to all its
being, dependent on the first cause, and nothing in it is independent.
“Next, in regard to what belongs to the true faith, not speaking
philosophically, to come to individuality about the divine persons, the
wisdom and the son of the mind, called by philosophers intellect, and
by theologians the word, which ought to be believed to have taken
on human flesh. But I, abiding in the phrases of philosophy, have not
understood it, but have doubted and held it with inconstant faith, not
that I remember to have shown marks of it in writing nor in speech,
except indirectly from other things, something of it may be gathered
as by way of ingenuity and profession in regard to what may be
proved by reason and concluded from natural light. Thus, in regard
to the Holy Spirit in a third person, I have not been able to
comprehend, as ought to be believed, but, according to the
Pythagoric manner, in conformity to the manner shown by Solomon,
I have understood it as the soul of the universe, or adjoined to the
universe according to the saying of the wisdom of Solomon: ‘The
spirit of God filled all the earth, and that which contains all things,’ all
which conforms equally to the Pythagoric doctrine explained by Virgil
in the text of the Æneid”:

Principio cœlum ac terras camposque liquentes,


Lucentemque globum Lunæ, Titaniaque astra
Spiritus intus alit, totamque infusa per artus
Mens agitat molem;

and the lines following.


“From this spirit, then, which is called the life of the universe, I
understand, in my philosophy, proceeds life and soul to everything
which has life and soul, which, moreover, I understand to be
immortal, as also to bodies, which, as to their substance, are all
immortal, there being no other death than division and congregation,
which doctrine seems expressed in Ecclesiastes, where it is said that
‘there is nothing new under the sun; that which is is that which was.’”
Furthermore, Bruno confesses his inability to comprehend the
doctrine of three persons in the godhead, and his doubts of the
incarnation of God in Jesus, but firmly pronounces his belief in the
miracles of Christ. How could he, being a Pythagorean philosopher,
discredit them? If, under the merciless constraint of the Inquisition,
he, like Galileo, subsequently recanted, and threw himself upon the
clemency of his ecclesiastical persecutors, we must remember that
he spoke like a man standing between the rack and the fagot, and
human nature cannot always be heroic when the corporeal frame is
debilitated by torture and imprisonment.
But for the opportune appearance of Berti’s authoritative work, we
would have continued to revere Bruno as a martyr, whose bust was
deservedly set high in the Pantheon of Exact Science, crowned with
laurel by the hand of Draper. But now we see that their hero of an
hour is neither atheist, materialist, nor positivist, but simply a
Pythagorean who taught the philosophy of Upper Asia, and claimed
to possess the powers of the magicians, so despised by Draper’s
own school! Nothing more amusing than this contretemps has
happened since the supposed statue of St. Peter was discovered by
irreverent archæologists to be nothing else than the Jupiter of the
Capitol, and Buddha’s identity with the Catholic St. Josaphat was
satisfactorily proven.
Thus, search where we may through the archives of history, we
find that there is no fragment of modern philosophy—whether
Newtonian, Cartesian, Huxleyian or any other—but has been dug
from the Oriental mines. Even Positivism and Nihilism find their
prototype in the exoteric portion of Kapila’s philosophy, as is well
remarked by Max Müller. It was the inspiration of the Hindu sages
that penetrated the mysteries of Praguâ Pâramitâ (perfect wisdom);
their hands that rocked the cradle of the first ancestor of that feeble
but noisy child that we have christened modern science.

You might also like