Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
100% found this document useful (5 votes)
26 views

JavaScript Data Structures and Algorithms: An Introduction to Understanding and Implementing Core Data Structure and Algorithm Fundamentals 1st Edition Sammie Bae - The full ebook with complete content is ready for download

The document provides information about various eBooks available for download on ebookmeta.com, focusing on topics such as data structures and algorithms, JavaScript, and other subjects. It includes links to specific titles, such as 'JavaScript Data Structures and Algorithms' by Sammie Bae and 'A Textbook of Data Structures and Algorithms' by G. A. Vijayalakshmi Pai. Additionally, it mentions the availability of different formats like PDF, EPUB, and MOBI for immediate download.

Uploaded by

atarifobah
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (5 votes)
26 views

JavaScript Data Structures and Algorithms: An Introduction to Understanding and Implementing Core Data Structure and Algorithm Fundamentals 1st Edition Sammie Bae - The full ebook with complete content is ready for download

The document provides information about various eBooks available for download on ebookmeta.com, focusing on topics such as data structures and algorithms, JavaScript, and other subjects. It includes links to specific titles, such as 'JavaScript Data Structures and Algorithms' by Sammie Bae and 'A Textbook of Data Structures and Algorithms' by G. A. Vijayalakshmi Pai. Additionally, it mentions the availability of different formats like PDF, EPUB, and MOBI for immediate download.

Uploaded by

atarifobah
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 72

Read Anytime Anywhere Easy Ebook Downloads at ebookmeta.

com

JavaScript Data Structures and Algorithms: An


Introduction to Understanding and Implementing
Core Data Structure and Algorithm Fundamentals 1st
Edition Sammie Bae
https://ebookmeta.com/product/javascript-data-structures-
and-algorithms-an-introduction-to-understanding-and-
implementing-core-data-structure-and-algorithm-
fundamentals-1st-edition-sammie-bae/

OR CLICK HERE

DOWLOAD EBOOK

Visit and Get More Ebook Downloads Instantly at https://ebookmeta.com


Recommended digital products (PDF, EPUB, MOBI) that
you can download immediately if you are interested.

A Textbook of Data Structures and Algorithms, Volume 3 :


Mastering Advanced Data Structures and Algorithm Design
Strategies 2nd Edition G. A. Vijayalakshmi Pai
https://ebookmeta.com/product/a-textbook-of-data-structures-and-
algorithms-volume-3-mastering-advanced-data-structures-and-algorithm-
design-strategies-2nd-edition-g-a-vijayalakshmi-pai/
ebookmeta.com

Data Structures and Algorithms with Python: With an


Introduction to Multiprocessing (Undergraduate Topics in
Computer Science) Lee
https://ebookmeta.com/product/data-structures-and-algorithms-with-
python-with-an-introduction-to-multiprocessing-undergraduate-topics-
in-computer-science-lee/
ebookmeta.com

Introduction to Algorithms & Data Structures 3: Learn


Linear Data Structures with Videos & Interview Questions.
1st Edition Aremu Bolakale
https://ebookmeta.com/product/introduction-to-algorithms-data-
structures-3-learn-linear-data-structures-with-videos-interview-
questions-1st-edition-aremu-bolakale/
ebookmeta.com

New Generation Korean Beginner Level Second Edition Mihyon


Jeon

https://ebookmeta.com/product/new-generation-korean-beginner-level-
second-edition-mihyon-jeon/

ebookmeta.com
Successful Supervision and Leadership Ensuring High
Performance Outcomes Using the PASE Model 1st Edition
Tracey Harris
https://ebookmeta.com/product/successful-supervision-and-leadership-
ensuring-high-performance-outcomes-using-the-pase-model-1st-edition-
tracey-harris/
ebookmeta.com

Clinical Interviewing, 6e Sixth Edition John Sommers-


Flanagan

https://ebookmeta.com/product/clinical-interviewing-6e-sixth-edition-
john-sommers-flanagan/

ebookmeta.com

One Road to Riches Haakon Gjerløw

https://ebookmeta.com/product/one-road-to-riches-haakon-gjerlow/

ebookmeta.com

Nationalism Referendums and Democracy Voting on Ethnic


Issues and Independence 2nd Edition Matt Qvortrup (Editor)

https://ebookmeta.com/product/nationalism-referendums-and-democracy-
voting-on-ethnic-issues-and-independence-2nd-edition-matt-qvortrup-
editor/
ebookmeta.com

A Strange Habit of Mind Cameron Winter 2 1st Edition


Andrew Klavan

https://ebookmeta.com/product/a-strange-habit-of-mind-cameron-
winter-2-1st-edition-andrew-klavan/

ebookmeta.com
Songs Words 2016th Edition Ginger Wildheart

https://ebookmeta.com/product/songs-words-2016th-edition-ginger-
wildheart/

ebookmeta.com
JavaScript Data
Structures and
Algorithms
An Introduction to Understanding and
Implementing Core Data Structure and
Algorithm Fundamentals

Sammie Bae
JavaScript Data Structures
and Algorithms
An Introduction to Understanding
and Implementing Core Data
Structure and Algorithm
Fundamentals

Sammie Bae
JavaScript Data Structures and Algorithms
Sammie Bae
Hamilton, ON, Canada

ISBN-13 (pbk): 978-1-4842-3987-2 ISBN-13 (electronic): 978-1-4842-3988-9


https://doi.org/10.1007/978-1-4842-3988-9
Library of Congress Control Number: 2019930417

Copyright © 2019 by Sammie Bae


This work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the
material is concerned, specifically the rights of translation, reprinting, reuse of illustrations, recitation,
broadcasting, reproduction on microfilms or in any other physical way, and transmission or information
storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now
known or hereafter developed.
Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with
every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an
editorial fashion and to the benefit of the trademark owner, with no intention of infringement of the
trademark.
The use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not
identified as such, is not to be taken as an expression of opinion as to whether or not they are subject to
proprietary rights.
While the advice and information in this book are believed to be true and accurate at the date of publication,
neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or
omissions that may be made. The publisher makes no warranty, express or implied, with respect to the
material contained herein.
Managing Director, Apress Media LLC: Welmoed Spahr
Acquisitions Editor: Louise Corrigan
Development Editor: Chris Nelson
Coordinating Editor: Nancy Chen
Cover designed by eStudioCalamar
Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street,
6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail orders-ny@springer-
sbm.com, or visit www.springeronline.com. Apress Media, LLC is a California LLC and the sole member
(owner) is Springer Science + Business Media Finance Inc (SSBM Finance Inc). SSBM Finance Inc is a
Delaware corporation.
For information on translations, please e-mail rights@apress.com, or visit www.apress.com/
rights-permissions.
Apress titles may be purchased in bulk for academic, corporate, or promotional use. eBook versions and
licenses are also available for most titles. For more information, reference our Print and eBook Bulk Sales
web page at www.apress.com/bulk-sales.
Any source code or other supplementary material referenced by the author in this book is available to
readers on GitHub via the book’s product page, located at www.apress.com/9781484239872. For more
detailed information, please visit www.apress.com/source-code.
Printed on acid-free paper
This book is dedicated to Dr. Hamid R. Tizhoosh for inspiring
me in my studies and to my mother, Min Kyoung Seo, for her
kindness and support.
Table of Contents
About the Author�����������������������������������������������������������������������������������������������������xv

About the Technical Reviewer�������������������������������������������������������������������������������xvii


Acknowledgments��������������������������������������������������������������������������������������������������xix

Introduction������������������������������������������������������������������������������������������������������������xxi

Chapter 1: Big-O Notation����������������������������������������������������������������������������������������� 1


Big-O Notation Primer������������������������������������������������������������������������������������������������������������������� 1
Common Examples������������������������������������������������������������������������������������������������������������������ 2
Rules of Big-O Notation����������������������������������������������������������������������������������������������������������������� 4
Coefficient Rule: “Get Rid of Constants”���������������������������������������������������������������������������������� 5
Sum Rule: “Add Big-Os Up”����������������������������������������������������������������������������������������������������� 6
Product Rule: “Multiply Big-Os”���������������������������������������������������������������������������������������������� 7
Polynomial Rule: “Big-O to the Power of k”���������������������������������������������������������������������������� 8
Summary�������������������������������������������������������������������������������������������������������������������������������������� 8
Exercises��������������������������������������������������������������������������������������������������������������������������������������� 9
Answers��������������������������������������������������������������������������������������������������������������������������������� 11

Chapter 2: JavaScript: Unique Parts����������������������������������������������������������������������� 13


JavaScript Scope������������������������������������������������������������������������������������������������������������������������ 13
Global Declaration: Global Scope������������������������������������������������������������������������������������������� 13
Declaration with var: Functional Scope��������������������������������������������������������������������������������� 13
Declaration with let: Block Scope������������������������������������������������������������������������������������������ 15

v
Table of Contents

Equality and Types���������������������������������������������������������������������������������������������������������������������� 16


Variable Types������������������������������������������������������������������������������������������������������������������������ 16
Truthy/Falsey Check�������������������������������������������������������������������������������������������������������������� 17
=== vs ==���������������������������������������������������������������������������������������������������������������������������� 18
Objects���������������������������������������������������������������������������������������������������������������������������������� 18
Summary������������������������������������������������������������������������������������������������������������������������������������ 20

Chapter 3: JavaScript Numbers������������������������������������������������������������������������������ 21


Number System�������������������������������������������������������������������������������������������������������������������������� 21
JavaScript Number Object���������������������������������������������������������������������������������������������������������� 23
Integer Rounding������������������������������������������������������������������������������������������������������������������� 23
Number.EPSILON������������������������������������������������������������������������������������������������������������������� 24
Maximums����������������������������������������������������������������������������������������������������������������������������� 24
Minimums������������������������������������������������������������������������������������������������������������������������������ 25
Size Summary����������������������������������������������������������������������������������������������������������������������� 26
Number Algorithms���������������������������������������������������������������������������������������������������������������� 26
Prime Factorization��������������������������������������������������������������������������������������������������������������� 28
Random Number Generator�������������������������������������������������������������������������������������������������������� 29
Exercises������������������������������������������������������������������������������������������������������������������������������������� 29
Summary������������������������������������������������������������������������������������������������������������������������������������ 34

Chapter 4: JavaScript Strings��������������������������������������������������������������������������������� 35


JavaScript String Primitive��������������������������������������������������������������������������������������������������������� 35
String Access������������������������������������������������������������������������������������������������������������������������� 35
String Comparison����������������������������������������������������������������������������������������������������������������� 36
String Search������������������������������������������������������������������������������������������������������������������������� 36
String Decomposition������������������������������������������������������������������������������������������������������������ 38
String Replace����������������������������������������������������������������������������������������������������������������������� 38
Regular Expressions������������������������������������������������������������������������������������������������������������������� 38
Basic Regex��������������������������������������������������������������������������������������������������������������������������� 39
Commonly Used Regexes������������������������������������������������������������������������������������������������������ 39
Encoding������������������������������������������������������������������������������������������������������������������������������������� 41
Base64 Encoding������������������������������������������������������������������������������������������������������������������� 42

vi
Table of Contents

String Shortening������������������������������������������������������������������������������������������������������������������������ 43
Encryption����������������������������������������������������������������������������������������������������������������������������������� 45
RSA Encryption���������������������������������������������������������������������������������������������������������������������� 46
Summary������������������������������������������������������������������������������������������������������������������������������� 50

Chapter 5: JavaScript Arrays��������������������������������������������������������������������������������� 53


Introducing Arrays����������������������������������������������������������������������������������������������������������������������� 53
Insertion�������������������������������������������������������������������������������������������������������������������������������� 53
Deletion��������������������������������������������������������������������������������������������������������������������������������� 54
Access����������������������������������������������������������������������������������������������������������������������������������� 54
Iteration��������������������������������������������������������������������������������������������������������������������������������������� 54
for (Variables; Condition; Modification)��������������������������������������������������������������������������������� 55
for ( in )���������������������������������������������������������������������������������������������������������������������������������� 56
for ( of )���������������������������������������������������������������������������������������������������������������������������������� 56
forEach( )�������������������������������������������������������������������������������������������������������������������������������� 56
Helper Functions������������������������������������������������������������������������������������������������������������������������� 57
.slice(begin,end)�������������������������������������������������������������������������������������������������������������������� 57
.splice(begin,size,element1,element2…)������������������������������������������������������������������������������ 58
.concat()��������������������������������������������������������������������������������������������������������������������������������� 59
.length Property��������������������������������������������������������������������������������������������������������������������� 59
Spread Operator�������������������������������������������������������������������������������������������������������������������� 60
Exercises������������������������������������������������������������������������������������������������������������������������������������� 60
JavaScript Functional Array Methods����������������������������������������������������������������������������������������� 67
Map��������������������������������������������������������������������������������������������������������������������������������������� 67
Filter�������������������������������������������������������������������������������������������������������������������������������������� 68
Reduce���������������������������������������������������������������������������������������������������������������������������������� 68
Multidimensional Arrays������������������������������������������������������������������������������������������������������������� 68
Exercises������������������������������������������������������������������������������������������������������������������������������������� 71
Summary������������������������������������������������������������������������������������������������������������������������������������ 81

vii
Table of Contents

Chapter 6: JavaScript Objects�������������������������������������������������������������������������������� 83


JavaScript Object Property��������������������������������������������������������������������������������������������������������� 83
Prototypal Inheritance����������������������������������������������������������������������������������������������������������������� 84
Constructor and Variables����������������������������������������������������������������������������������������������������������� 85
Summary������������������������������������������������������������������������������������������������������������������������������������ 86
Exercises������������������������������������������������������������������������������������������������������������������������������������� 87

Chapter 7: JavaScript Memory Management��������������������������������������������������������� 89


Memory Leaks���������������������������������������������������������������������������������������������������������������������������� 89
Reference to an Object���������������������������������������������������������������������������������������������������������� 89
Leaking DOM������������������������������������������������������������������������������������������������������������������������� 90
Global window Object������������������������������������������������������������������������������������������������������������ 91
Limiting Object References��������������������������������������������������������������������������������������������������� 92
The delete Operator��������������������������������������������������������������������������������������������������������������� 92
Summary������������������������������������������������������������������������������������������������������������������������������������ 93
Exercises������������������������������������������������������������������������������������������������������������������������������������� 93

Chapter 8: Recursion���������������������������������������������������������������������������������������������� 99
Introducing Recursion����������������������������������������������������������������������������������������������������������������� 99
Rules of Recursion�������������������������������������������������������������������������������������������������������������������� 100
Base Case���������������������������������������������������������������������������������������������������������������������������� 100
Divide-and-Conquer Method����������������������������������������������������������������������������������������������� 101
Classic Example: Fibonacci Sequence�������������������������������������������������������������������������������� 101
Fibonacci Sequence: Tail Recursion������������������������������������������������������������������������������������ 102
Pascal’s Triangle������������������������������������������������������������������������������������������������������������������ 103
Big-O for Recursion������������������������������������������������������������������������������������������������������������������� 105
Recurrence Relations���������������������������������������������������������������������������������������������������������� 105
Master Theorem������������������������������������������������������������������������������������������������������������������ 106
Recursive Call Stack Memory��������������������������������������������������������������������������������������������������� 107
Summary���������������������������������������������������������������������������������������������������������������������������������� 109
Exercises����������������������������������������������������������������������������������������������������������������������������������� 109

viii
Table of Contents

Chapter 9: Sets����������������������������������������������������������������������������������������������������� 117


Introducing Sets������������������������������������������������������������������������������������������������������������������������ 117
Set Operations�������������������������������������������������������������������������������������������������������������������������� 117
Insertion������������������������������������������������������������������������������������������������������������������������������ 118
Deletion������������������������������������������������������������������������������������������������������������������������������� 118
Contains������������������������������������������������������������������������������������������������������������������������������� 118
Other Utility Functions�������������������������������������������������������������������������������������������������������������� 119
Intersection�������������������������������������������������������������������������������������������������������������������������� 119
isSuperSet��������������������������������������������������������������������������������������������������������������������������� 119
Union����������������������������������������������������������������������������������������������������������������������������������� 120
Difference���������������������������������������������������������������������������������������������������������������������������� 120
Summary���������������������������������������������������������������������������������������������������������������������������������� 121
Exercises����������������������������������������������������������������������������������������������������������������������������������� 122

Chapter 10: Searching and Sorting���������������������������������������������������������������������� 125


Searching���������������������������������������������������������������������������������������������������������������������������������� 125
Linear Search���������������������������������������������������������������������������������������������������������������������� 125
Binary Search���������������������������������������������������������������������������������������������������������������������� 127
Sorting�������������������������������������������������������������������������������������������������������������������������������������� 129
Bubble Sort�������������������������������������������������������������������������������������������������������������������������� 129
Selection Sort���������������������������������������������������������������������������������������������������������������������� 131
Insertion Sort����������������������������������������������������������������������������������������������������������������������� 132
Quicksort����������������������������������������������������������������������������������������������������������������������������� 134
Quickselect�������������������������������������������������������������������������������������������������������������������������� 137
Mergesort���������������������������������������������������������������������������������������������������������������������������� 138
Count Sort���������������������������������������������������������������������������������������������������������������������������� 140
JavaScript’s Built-in Sort����������������������������������������������������������������������������������������������������� 141
Summary���������������������������������������������������������������������������������������������������������������������������������� 142
Exercises����������������������������������������������������������������������������������������������������������������������������������� 143

ix
Table of Contents

Chapter 11: Hash Tables��������������������������������������������������������������������������������������� 151


Introducing Hash Tables������������������������������������������������������������������������������������������������������������ 151
Hashing Techniques������������������������������������������������������������������������������������������������������������������ 152
Prime Number Hashing������������������������������������������������������������������������������������������������������� 152
Probing�������������������������������������������������������������������������������������������������������������������������������� 154
Rehashing/Double-Hashing������������������������������������������������������������������������������������������������� 155
Hash Table Implementation������������������������������������������������������������������������������������������������������� 156
Using Linear Probing����������������������������������������������������������������������������������������������������������� 156
Using Quadratic Probing������������������������������������������������������������������������������������������������������ 158
Using Double-Hashing with Linear Probing������������������������������������������������������������������������� 160
Summary���������������������������������������������������������������������������������������������������������������������������������� 161

Chapter 12: Stacks and Queues���������������������������������������������������������������������������� 163


Stacks��������������������������������������������������������������������������������������������������������������������������������������� 163
Peek������������������������������������������������������������������������������������������������������������������������������������� 165
Insertion������������������������������������������������������������������������������������������������������������������������������ 165
Deletion������������������������������������������������������������������������������������������������������������������������������� 166
Access��������������������������������������������������������������������������������������������������������������������������������� 166
Search��������������������������������������������������������������������������������������������������������������������������������� 167
Queues�������������������������������������������������������������������������������������������������������������������������������������� 167
Peek������������������������������������������������������������������������������������������������������������������������������������� 169
Insertion������������������������������������������������������������������������������������������������������������������������������ 169
Deletion������������������������������������������������������������������������������������������������������������������������������� 169
Access��������������������������������������������������������������������������������������������������������������������������������� 170
Search��������������������������������������������������������������������������������������������������������������������������������� 171
Summary���������������������������������������������������������������������������������������������������������������������������������� 171
Exercises����������������������������������������������������������������������������������������������������������������������������������� 172

Chapter 13: Linked Lists��������������������������������������������������������������������������������������� 179


Singly Linked Lists�������������������������������������������������������������������������������������������������������������������� 179
Insertion������������������������������������������������������������������������������������������������������������������������������ 180
Deletion by Value����������������������������������������������������������������������������������������������������������������� 181

x
Table of Contents

Deletion at the Head������������������������������������������������������������������������������������������������������������ 182


Search��������������������������������������������������������������������������������������������������������������������������������� 183
Doubly Linked Lists������������������������������������������������������������������������������������������������������������������� 184
Insertion at the Head����������������������������������������������������������������������������������������������������������� 185
Insertion at the Tail�������������������������������������������������������������������������������������������������������������� 185
Deletion at the Head������������������������������������������������������������������������������������������������������������ 186
Deletion at the Tail��������������������������������������������������������������������������������������������������������������� 187
Search��������������������������������������������������������������������������������������������������������������������������������� 188
Summary���������������������������������������������������������������������������������������������������������������������������������� 189
Exercises����������������������������������������������������������������������������������������������������������������������������������� 190

Chapter 14: Caching��������������������������������������������������������������������������������������������� 193


Understanding Caching������������������������������������������������������������������������������������������������������������� 193
Least Frequently Used Caching������������������������������������������������������������������������������������������������� 194
Least Recently Used Caching���������������������������������������������������������������������������������������������������� 199
Summary���������������������������������������������������������������������������������������������������������������������������������� 203

Chapter 15: Trees�������������������������������������������������������������������������������������������������� 205


General Tree Structure�������������������������������������������������������������������������������������������������������������� 205
Binary Trees������������������������������������������������������������������������������������������������������������������������������ 206
Tree Traversal���������������������������������������������������������������������������������������������������������������������������� 207
Pre-order Traversal�������������������������������������������������������������������������������������������������������������� 207
In-Order Traversal���������������������������������������������������������������������������������������������������������������� 209
Post-order Traversal������������������������������������������������������������������������������������������������������������ 211
Level-Order Traversal���������������������������������������������������������������������������������������������������������� 212
Tree Traversal Summary������������������������������������������������������������������������������������������������������ 214
Binary Search Trees������������������������������������������������������������������������������������������������������������������ 214
Insertion������������������������������������������������������������������������������������������������������������������������������ 216
Deletion������������������������������������������������������������������������������������������������������������������������������� 218
Search��������������������������������������������������������������������������������������������������������������������������������� 220

xi
Table of Contents

AVL Trees����������������������������������������������������������������������������������������������������������������������������������� 221


Single Rotation�������������������������������������������������������������������������������������������������������������������� 221
Double Rotation������������������������������������������������������������������������������������������������������������������� 225
Balancing the Tree��������������������������������������������������������������������������������������������������������������� 228
Insertion������������������������������������������������������������������������������������������������������������������������������ 229
Putting It All Together: AVL Tree Example����������������������������������������������������������������������������� 231
Summary���������������������������������������������������������������������������������������������������������������������������������� 234
Exercises����������������������������������������������������������������������������������������������������������������������������������� 234

Chapter 16: Heaps������������������������������������������������������������������������������������������������ 245


Understanding Heaps���������������������������������������������������������������������������������������������������������������� 245
Max-Heap���������������������������������������������������������������������������������������������������������������������������� 246
Min-Heap����������������������������������������������������������������������������������������������������������������������������� 247
Binary Heap Array Index Structure�������������������������������������������������������������������������������������������� 248
Percolation: Bubbling Up and Down������������������������������������������������������������������������������������ 250
Implementing Percolation��������������������������������������������������������������������������������������������������� 253
Max-Heap Example������������������������������������������������������������������������������������������������������������� 254
Min-Heap Complete Implementation���������������������������������������������������������������������������������������� 258
Max-Heap Complete Implementation��������������������������������������������������������������������������������������� 259
Heap Sort���������������������������������������������������������������������������������������������������������������������������������� 261
Ascending-Order Sort (Min-Heap)��������������������������������������������������������������������������������������� 261
Descending-Order Sort (Max-Heap)������������������������������������������������������������������������������������ 264
Summary���������������������������������������������������������������������������������������������������������������������������������� 267
Exercises����������������������������������������������������������������������������������������������������������������������������������� 268

Chapter 17: Graphs����������������������������������������������������������������������������������������������� 273


Graph Basics����������������������������������������������������������������������������������������������������������������������������� 273
Undirected Graphs�������������������������������������������������������������������������������������������������������������������� 277
Adding Edges and Vertices�������������������������������������������������������������������������������������������������� 279
Removing Edges and Vertices��������������������������������������������������������������������������������������������� 280
Directed Graphs������������������������������������������������������������������������������������������������������������������������ 282

xii
Table of Contents

Graph Traversal������������������������������������������������������������������������������������������������������������������������� 285


Breadth-First Search����������������������������������������������������������������������������������������������������������� 286
Depth-First Search�������������������������������������������������������������������������������������������������������������� 289
Weighted Graphs and Shortest Path����������������������������������������������������������������������������������������� 293
Graphs with Weighted Edges����������������������������������������������������������������������������������������������� 293
Dijkstra’s Algorithm: Shortest Path�������������������������������������������������������������������������������������� 294
Topological Sort������������������������������������������������������������������������������������������������������������������������ 298
Summary���������������������������������������������������������������������������������������������������������������������������������� 300

Chapter 18: Advanced Strings������������������������������������������������������������������������������ 303


Trie (Prefix Tree)������������������������������������������������������������������������������������������������������������������������ 303
Boyer–Moore String Search������������������������������������������������������������������������������������������������������ 307
Knuth–Morris–Pratt String Search�������������������������������������������������������������������������������������������� 311
Rabin–Karp Search������������������������������������������������������������������������������������������������������������������� 316
The Rabin Fingerprint���������������������������������������������������������������������������������������������������������� 316
Applications in Real Life������������������������������������������������������������������������������������������������������ 319
Summary���������������������������������������������������������������������������������������������������������������������������������� 320

Chapter 19: Dynamic Programming��������������������������������������������������������������������� 321


Motivations for Dynamic Programming������������������������������������������������������������������������������������ 321
Rules of Dynamic Programming����������������������������������������������������������������������������������������������� 323
Overlapping Subproblems��������������������������������������������������������������������������������������������������� 323
Optimal Substructure���������������������������������������������������������������������������������������������������������� 323
Example: Ways to Cover Steps�������������������������������������������������������������������������������������������� 323
Classical Dynamic Programming Examples������������������������������������������������������������������������������ 325
The Knapsack Problem�������������������������������������������������������������������������������������������������������� 325
Longest Common Subsequence������������������������������������������������������������������������������������������ 328
Coin Change������������������������������������������������������������������������������������������������������������������������ 330
Edit (Levenshtein) Distance������������������������������������������������������������������������������������������������� 334
Summary���������������������������������������������������������������������������������������������������������������������������������� 338

xiii
Table of Contents

Chapter 20: Bit Manipulation�������������������������������������������������������������������������������� 339


Bitwise Operators��������������������������������������������������������������������������������������������������������������������� 339
AND�������������������������������������������������������������������������������������������������������������������������������������� 340
OR���������������������������������������������������������������������������������������������������������������������������������������� 340
XOR�������������������������������������������������������������������������������������������������������������������������������������� 341
NOT�������������������������������������������������������������������������������������������������������������������������������������� 341
Left Shift������������������������������������������������������������������������������������������������������������������������������ 342
Right Shift���������������������������������������������������������������������������������������������������������������������������� 342
Zero-Fill Right Shift������������������������������������������������������������������������������������������������������������� 343
Number Operations������������������������������������������������������������������������������������������������������������������� 343
Addition������������������������������������������������������������������������������������������������������������������������������� 343
Subtraction�������������������������������������������������������������������������������������������������������������������������� 344
Multiplication����������������������������������������������������������������������������������������������������������������������� 345
Division�������������������������������������������������������������������������������������������������������������������������������� 347
Summary���������������������������������������������������������������������������������������������������������������������������������� 349

Index��������������������������������������������������������������������������������������������������������������������� 351

xiv
About the Author
Sammie Bae is a data engineer at Yelp and previously
worked for the data platform engineering team at
NVIDIA. He developed a deep interest in JavaScript
during an internship at SMART Technologies (acquired by
Foxconn), where he developed Node.js-based JavaScript
APIs for serial port communication between electronic
board drivers and a web application. Despite how relevant
JavaScript is to the modern software engineering industry,
currently no books besides this one teach algorithms and
data structures using JavaScript. Sammie understands how
difficult these computer science concepts are and aims to
provide clear and concise explanations in this book.

xv
About the Technical Reviewer
Phil Nash is a developer evangelist for Twilio, serving
developer communities in London and all over the world.
He is a Ruby, JavaScript, and Swift developer; Google
Developers Expert; blogger; speaker; and occasional brewer.
He can be found hanging out at meetups and conferences,
playing with new technologies and APIs, or writing open
source code.

xvii
Acknowledgments
Thank you, Phil Nash, for the valuable feedback that helped me improve the technical
content of this book with clear explanations and concise code.
Special thanks to the Apress team. This includes James Markham, Nancy Chen, Jade
Scard, and Chris Nelson. Finally, I want to thank Steve Anglin for reaching out to me to
publish with Apress.

xix
Introduction
The motivation for writing this book was the lack of resources available about data
structures and algorithms written in JavaScript. This was strange to me because
today many of the job opportunities for software development require knowledge of
JavaScript; it is the only language that can be used to write the entire stack, including the
front-end, mobile (native and hybrid) platforms, and back-end. It is crucial for JavaScript
developers to understand how data structures work and how to design algorithms to
build applications.
Therefore, this book aims to teach data structure and algorithm concepts from
computer science for JavaScript rather than for the more typical Java or C++. Because
JavaScript follows the prototypal inheritance pattern, unlike Java and C++ (which follow
the inheritance pattern), there are some changes in writing data structures in JavaScript.
The classical inheritance pattern allows inheritance by creating a blueprint-­like form
that objects follow during inheritance. However, the prototypal inheritance pattern
means copying the objects and changing their properties.
This book first covers fundamental mathematics for Big-O analysis and then lays out
the basic JavaScript foundations, such as primitive objects and types. Then, this book
covers implementations and algorithms for fundamental data structures such as linked
lists, stacks, trees, heaps, and graphs. Finally, more advanced topics such as efficient
string search algorithms, caching algorithms, and dynamic programming problems are
explored in great detail.

xxi
CHAPTER 1

Big-O Notation
O(1) is holy.
—Hamid Tizhoosh

Before learning how to implement algorithms, you should understand how to analyze
the effectiveness of them. This chapter will focus on the concept of Big-O notation for
time and algorithmic space complexity analysis. By the end of this chapter, you will
understand how to analyze an implementation of an algorithm with respect to both time
(execution time) and space (memory consumed).

Big-O Notation Primer


The Big-O notation measures the worst-case complexity of an algorithm. In Big-O
notation, n represents the number of inputs. The question asked with Big-O is the
following: “What will happen as n approaches infinity?”
When you implement an algorithm, Big-O notation is important because it tells you
how efficient the algorithm is. Figure 1-1 shows some common Big-O notations.

1
© Sammie Bae 2019
S. Bae, JavaScript Data Structures and Algorithms, https://doi.org/10.1007/978-1-4842-3988-9_1
Chapter 1 Big-O Notation

Figure 1-1. Common Big-O complexities

The following sections illustrate these common time complexities with some simple
examples.

Common Examples
O(1) does not change with respect to input space. Hence, O(1) is referred to as being
constant time. An example of an O(1) algorithm is accessing an item in the array by its
index. O(n) is linear time and applies to algorithms that must do n operations in the
worst-case scenario.
An example of an O(n) algorithm is printing numbers from 0 to n-1, as shown here:

1 function  exampleLinear(n) {
2                   for  (var  i = 0 ; i <  n; i++ ) {

2
Chapter 1 Big-O Notation

3                              console.log(i);
4                   }
5  }

Similarly, O(n2) is quadratic time, and O(n3) is cubic time. Examples of these
complexities are shown here:

1 function  exampleQuadratic(n) {
2                   for  (var  i = 0 ; i <  n; i++ ) {
3                                 console.log(i);
4                                for  (var  j =  i; j <  n; j++ ) {
5                                             console.log(j);
6                              }
7                   }
8  }

1 function  exampleCubic(n) {
2                   for  (var  i = 0 ; i <  n; i++ ) {
3                                  console.log(i);
4                                for  (var  j =  i; j <  n; j++ ) {
5                                              console.log(j);
6                                                  for  (var  k =  j;
j <  n; j++ ) {
7                                                          console.log(k);
8                                                  }
9                                }
10           }
11 }

Finally, an example algorithm of logarithmic time complexity is printing elements


that are a power of 2 between 2 and n. For example, exampleLogarithmic(10) will print
the following:

2,4,8,16,32,64

3
Chapter 1 Big-O Notation

The efficiency of logarithmic time complexities is apparent with large inputs such
as a million items. Although n is a million, exampleLogarithmic will print only 19
items because log2(1,000,000) = 19.9315686. The code that implements this logarithmic
behavior is as follows:

1 function exampleLogarithmic(n) {
2                   for (var i = 2 ; i <= n; i= i*2 ) {
3                          console.log(i);
4                  }
5 }

Rules of Big-O Notation


Let’s represent an algorithm’s complexity as f(n). n represents the number of inputs,
f(n)time represents the time needed, and f(n)space represents the space (additional
memory) needed for the algorithm. The goal of algorithm analysis is to understand the
algorithm’s efficiency by calculating f(n). However, it can be challenging to calculate f(n).
Big-O notation provides some fundamental rules that help developers compute for f(n).

• Coefficient rule: If f(n) is O(g(n)), then kf(n) is O(g(n)), for any


constant k > 0. The first rule is the coefficient rule, which eliminates
coefficients not related to the input size, n. This is because as n
approaches infinity, the other coefficient becomes negligible.

• Sum rule: If f(n) is O(h(n)) and g(n) is O(p(n)), then f(n)+g(n) is


O(h(n)+p(n)). The sum rule simply states that if a resultant time
complexity is a sum of two different time complexities, the resultant
Big-O notation is also the sum of two different Big-O notations.
• Product rule: If f(n) is O(h(n)) and g(n) is O(p(n)), then f(n)g(n) is
O(h(n)p(n)). Similarly, the product rule states that Big-O is multiplied
when the time complexities are multiplied.

• Transitive rule: If f(n) is O(g(n)) and g(n) is O(h(n)), then f(n) is


O(h(n)). The transitive rule is a simple way to state that the same time
complexity has the same Big-O.

4
Chapter 1 Big-O Notation

• Polynomial rule: If f(n) is a polynomial of degree k, then f(n) is


O(nk). Intuitively, the polynomial rule states that polynomial time
complexities have Big-O of the same polynomial degree.

• Log of a power rule: log(nk) is O(log(n)) for any constant k > 0. With
the log of a power rule, constants within a log function are also
ignored in Big-O notation.

Special attention should be paid to the first three rules and the polynomial rule
because they are the most commonly used. I’ll discuss each of those rules in the
following sections.

Coefficient Rule: “Get Rid of Constants”


Let’s first review the coefficient rule. This rule is the easiest rule to understand. It simply
requires you to ignore any non-input-size-related constants. Coefficients in Big-O are
negligible with large input sizes. Therefore, this is the most important rule of Big-O
notations.

If f(n) is O(g(n)), then kf(n) is O(g(n)), for any constant k > 0.

This means that both 5f(n) and f(n) have the same Big-O notation of O(f(n)).
Here is an example of a code block with a time complexity of O(n):

1   function a(n){
2       var count =0;
3       for (var i=0;i<n;i++){
4           count+=1;
5       }
6       return count;
7   }

This block of code has f(n) = n. This is because it adds to count n times. Therefore,
this function is O(n) in time complexity:

1   function a(n){
2       var count =0;
3       for (var i=0;i<5*n;i++){

5
Chapter 1 Big-O Notation

4           count+=1;
5       }
6       return count;
7   }

This block has f(n) = 5n. This is because it runs from 0 to 5n. However, the first two
examples both have a Big-O notation of O(n). Simply put, this is because if n is close to
infinity or another large number, those four additional operations are meaningless. It is
going to perform it n times. Any constants are negligible in Big-O notation.
The following code block demonstrates another function with a linear time
complexity but with an additional operation on line 6:

1   function a(n){
2       var count =0;
3       for (var i=0;i<n;i++){
4           count+=1;
5       }
6       count+=3;
7       return count;
8   }

Lastly, this block of code has f(n) = n+1. There is +1 from the last operation
(count+=3). This still has a Big-O notation of O(n). This is because that 1 operation is not
dependent on the input n. As n approaches infinity, it will become negligible.

Sum Rule: “Add Big-Os Up”


The sum rule is intuitive to understand; time complexities can be added. Imagine a
master algorithm that involves two other algorithms. The Big-O notation of that master
algorithm is simply the sum of the other two Big-O notations.

If f(n) is O(h(n)) and g(n) is O(p(n)), then f(n)+g(n) is O(h(n)+p(n)).

It is important to remember to apply the coefficient rule after applying this rule.

6
Chapter 1 Big-O Notation

The following code block demonstrates a function with two main loops whose time
complexities must be considered independently and then summed:

1   function a(n){
2       var count =0;
3       for (var i=0;i<n;i++){
4           count+=1;
5       }
6       for (var i=0;i<5*n;i++){
7           count+=1;
8       }
9       return count;
10   }

In this example, line 4 has f(n) = n, and line 7 has f(n) = 5n. This results in 6n.
However, when applying the coefficient rule, the final result is O(n) = n.

Product Rule: “Multiply Big-Os”


The product rule simply states how Big-Os can be multiplied.

If f(n) is O(h(n)) and g(n) is O(p(n)), then f(n)g(n) is O(h(n)p(n)).

The following code block demonstrates a function with two nested for loops for
which the product rule is applied:

1   function (n){
2       var count =0;
3       for (var i=0;i<n;i++){
4           count+=1;
5           for (var i=0;i<5*n;i++){
6               count+=1;
7           }
8       }
9       return count;
10   }

7
Chapter 1 Big-O Notation

In this example, f(n) = 5n*n because line 7 runs 5n times for a total of n iterations.
Therefore, this results in a total of 5n2 operations. Applying the coefficient rule, the result
is that O(n)=n2.

Polynomial Rule: “Big-O to the Power of k”


The polynomial rule states that polynomial time complexities have a Big-O notation of
the same polynomial degree.
Mathematically, it’s as follows:

If f(n) is a polynomial of degree k, then f(n) is O(nk).


The following code block has only one for loop with quadratic time complexity:

1   function a(n){
2       var count =0;
3       for (var i=0;i<n*n;i++){
4           count+=1;
5       }
6       return count;
7   }

In this example, f(n) = nˆ2 because line 4 runs n*n iterations.


This was a quick overview of the Big-O notation. There is more to come as you
progress through the book.

Summary
Big-O is important for analyzing and comparing the efficiencies of algorithms.
The analysis of Big-O starts by looking at the code and applying the rules to simplify
the Big-O notation. The following are the most often used rules:

• Eliminating coefficients/constants (coefficient rule)

• Adding up Big-Os (sum rule)


• Multiplying Big-Os (product rule)

• Determining the polynomial of the Big-O notation by looking at loops


(polynomial rule)

8
Chapter 1 Big-O Notation

Exercises
Calculate the time complexities for each of the exercise code snippets.

EXERCISE 1

1   function someFunction(n) {
2
3       for (var i=0;i<n*1000;i++) {
4           for (var j=0;j<n*20;j++) {
5               console.log(i+j);
6           }
7       }
8
9   }

EXERCISE 2

1   function someFunction(n) {
2
3       for (var i=0;i<n;i++) {
4           for (var j=0;j<n;j++) {
5               for (var k=0;k<n;k++) {
6                   for (var l=0;l<10;l++) {
7                       console.log(i+j+k+l);
8                   }
9               }
10           }
11       }
12
13   }

9
Chapter 1 Big-O Notation

EXERCISE 3

1   function someFunction(n) {
2
3       for (var i=0;i<1000;i++) {
4           console.log("hi");
5       }
6
7   }

EXERCISE 4

1   function someFunction(n) {
2
3       for (var i=0;i<n*10;i++) {
4           console.log(n);
5       }
6
7   }

EXERCISE 5

1   function someFunction(n) {
2
3       for (var i=0;i<n;i*2) {
4           console.log(n);
5       }
6
7   }

10
Chapter 1 Big-O Notation

EXERCISE 6

1   function someFunction(n) {
2
3       while (true){
4           console.log(n);
5       }
6   }

Answers
1. O(n2)
There are two nested loops. Ignore the constants in front of n.

2. O(n3)
There are four nested loops, but the last loop runs only until 10.

3. O(1)
Constant complexity. The function runs from 0 to 1000. This does
not depend on n.

4. O(n)
Linear complexity. The function runs from 0 to 10n. Constants are
ignored in Big-O.
5. O(log2n)
Logarithmic complexity. For a given n, this will operate only log2n
times because i is incremented by multiplying by 2 rather than
adding 1 as in the other examples.

6. O(∞)

Infinite loop. This function will not end.

11
CHAPTER 2

JavaScript: Unique Parts


This chapter will briefly discuss some exceptions and cases of JavaScript’s syntax and
behavior. As a dynamic and interpreted programming language, its syntax is different
from that of traditional object-oriented programming languages. These concepts are
fundamental to JavaScript and will help you to develop a better understanding of the
process of designing algorithms in JavaScript.

J avaScript Scope
The scope is what defines the access to JavaScript variables. In JavaScript, variables
can belong to the global scope or to the local scope. Global variables are variables that
belong in the global scope and are accessible from anywhere in the program.

Global Declaration: Global Scope


In JavaScript, variables can be declared without using any operators. Here’s an example:

1  test = "sss";
2  console.log(test); // prints "sss"

However, this creates a global variable, and this is one of the worst practices in
JavaScript. Avoid doing this at all costs. Always use var or let to declare variables.
Finally, when declaring variables that won’t be modified, use const.

Declaration with var: Functional Scope


In JavaScript, var is one keyword used to declare variables. These variable declarations
“float” all the way to the top. This is known as variable hoisting. Variables declared at the
bottom of the script will not be the last thing executed in a JavaScript program during
runtime.
13
© Sammie Bae 2019
S. Bae, JavaScript Data Structures and Algorithms, https://doi.org/10.1007/978-1-4842-3988-9_2
Chapter 2 JavaScript: Unique Parts

Here’s an example:

1  function scope1(){
2          var top = "top";
3          bottom = "bottom";
4          console.log(bottom);
5
6          var bottom;
7  }
8  scope1(); // prints "bottom" - no error

How does this work? The previous is the same as writing the following:

1  function scope1(){
2          var top = "top";
3          var  bottom;
4          bottom = "bottom"
5          console.log(bottom);
6  }
7  scope1(); // prints "bottom" - no error

The bottom variable declaration, which was at the last line in the function, is floated
to the top, and logging the variable works.
The key thing to note about the var keyword is that the scope of the variable is the
closest function scope. What does this mean?
In the following code, the scope2 function is the function scope closest to the print
variable:

1  function scope2(print){
2          if(print){
3                   var insideIf = '12';
4          }
5          console.log(insideIf);
6  }
7  scope2(true); // prints '12' - no error

14
Chapter 2 JavaScript: Unique Parts

To illustrate, the preceding function is equivalent to the following:

1  function scope2(print){
2          var insideIf;
3
4          if(print){
5                   insideIf = '12';
6          }
7          console.log(insideIf);
8  }
9  scope2(true); // prints '12' - no error

In Java, this syntax would have thrown an error because the insideIf variable is
generally available only in that if statement block and not outside it.
Here’s another example:

1  var a = 1;
2  function four() {
3    if (true) {
4      var a = 4;
5    }
6
7    console.log(a); // prints '4'
8  }

4 was printed, not the global value of 1, because it was redeclared and available in
that scope.

Declaration with let: Block Scope


Another keyword that can be used to declare a variable is let. Any variables declared
this way are in the closest block scope (meaning within the {} they were declared in).

1  function scope3(print){
2          if(print){
3                   let insideIf = '12';
4          }

15
Chapter 2 JavaScript: Unique Parts

5          console.log(insideIf);
6  }
7  scope3(true); // prints ''

In this example, nothing is logged to the console because the insideIf variable is
available only inside the if statement block.

Equality and Types


JavaScript has different data types than in traditional languages such as Java. Let’s
explore how this impacts things such as equality comparison.

Variable Types
In JavaScript, there are seven primitive data types: boolean, number, string, undefined,
object, function, and symbol (symbol won’t be discussed). One thing that stands out
here is that undefined is a primitive value that is assigned to a variable that has just been
declared. typeof is the primitive operator used to return the type of a variable.

1  var is20 = false; // boolean


2  typeof is20; // boolean
3
4  var  age = 19;
5  typeof age; // number
6
7  var  lastName = "Bae";
8  typeof lastName; // string
9
10  var fruits = ["Apple", "Banana", "Kiwi"];
11  typeof fruits; // object
12
13  var me = {firstName:"Sammie", lastName:"Bae"};
14  typeof me; // object
15
16  var nullVar = null;
17  typeof nullVar; // object
18
16
Chapter 2 JavaScript: Unique Parts

19  var function1 = function(){


20          console.log(1);
21  }
22  typeof function1 // function
23
24  var blank;
25  typeof blank; // undefined

Truthy/Falsey Check
True/false checking is used in if statements. In many languages, the parameter inside
the if() function must be a boolean type. However, JavaScript (and other dynamically
typed languages) is more flexible with this. Here’s an example:

1  if(node){
2          ...
3  }

Here, node is some variable. If that variable is empty, null, or undefined, it will be
evaluated as false.
Here are commonly used expressions that evaluate to false:

• false

• 0

• Empty strings ('' and "")


• NaN

• undefined

• null

Here are commonly used expressions that evaluate to true:

• true

• Any number other than 0

• Non-empty strings

• Non-empty object

17
Chapter 2 JavaScript: Unique Parts

Here’s an example:

1  var printIfTrue = ";


2
3  if (printIfTrue) {
4          console.log('truthy');
5  } else {
6          console.log('falsey'); // prints 'falsey'
7  }

=== vs ==
JavaScript is a scripting language, and variables are not assigned a type during
declaration. Instead, types are interpreted as the code runs.
Hence, === is used to check equality more strictly than ==. === checks for both the
type and the value, while == checks only for the value.

1  "5" == 5 // returns true


2  "5" === 5 // returns false

"5" == 5 returns true because "5" is coerced to a number before the comparison.
On the other hand, "5" === 5 returns false because the type of "5" is a string, while 5 is
a number.

Objects
Most strongly typed languages such as Java use isEquals() to check whether two objects
are the same. You may be tempted to simply use the == operator to check whether two
objects are the same in JavaScript.
However, this will not evaluate to true.

1  var o1 = {};
2  var o2 = {};
3
4  o1 == o2 // returns false
5  o1 === o2 // returns false

18
Chapter 2 JavaScript: Unique Parts

Although these objects are equivalent (same properties and values), they are not
equal. Namely, the variables have different addresses in memory.
This is why most JavaScript applications use utility libraries such as lodash1 or
underscore,2 which have the isEqual(object1, object2) function to check two objects
or values strictly. This occurs via implementation of some property-based equality
checking where each property of the object is compared.
In this example, each property is compared to achieve an accurate object equality result.

1  function isEquivalent(a, b) {
2      // arrays of property names
3      var aProps = Object.getOwnPropertyNames(a);
4      var bProps = Object.getOwnPropertyNames(b);
5
6      // If their property lengths are different, they're different objects
7      if (aProps.length != bProps.length) {
8          return false;
9      }
10
11      for (var  i = 0; i < aProps.length; i++) {
12          var propName = aProps[i];
13
14          // If the values of the property are different, not equal
15          if (a[propName] !== b[propName]) {
16              return false;
17          }
18      }
19
20     // If everything matched, correct
21     return  true;
22  }
23  isEquivalent({'hi':12},{'hi':12}); // returns true

1
h ttps://lodash.com/
2
http://underscorejs.org/

19
Chapter 2 JavaScript: Unique Parts

However, this would still work for objects that have only a string or a number as the
property.

1  var obj1 = {'prop1': 'test','prop2': function (){} };


2  var obj2 = {'prop1': 'test','prop2': function (){} };
3
4  isEquivalent(obj1,obj2); // returns false

This is because functions and arrays cannot simply use the == operator to check for
equality.

1  var function1 = function(){console.log(2)};


2  var function2 = function(){console.log(2)};
3  console.log(function1 == function2); // prints 'false'

Although the two functions perform the same operation, the functions have
different addresses in memory, and therefore the equality operator returns false.
The primitive equality check operators, == and ===, can be used only for strings and
numbers. To implement an equivalence check for objects, each property in the object
needs to be checked.

Summary
JavaScript has a different variable declaration technique than most programming
languages. var declares the variable within the function scope, let declares the variable
in the block scope, and variables can be declared without any operator in the global
scope; however, global scope should be avoided at all times. For type checking, typeof
should be used to validate the expected type. Finally, for equality checks, use == to check
the value, and use === to check for the type as well as the value. However, use these only
on non-object types such as numbers, strings, and booleans.

20
CHAPTER 3

JavaScript Numbers
This chapter will focus on JavaScript number operations, number representation, Number
objects, common number algorithms, and random number generation. By the end of
this chapter, you will understand how to work with numbers in JavaScript as well as how
to implement prime factorization, which is fundamental for encryption.
Number operations of a programming language allow you to compute numerical
values. Here are the number operators in JavaScript:

+ : addition
- : subtraction
/ : division
* : multiplication
% : modulus

These operators are universally used in other programming languages and are not
specific to JavaScript.

N
 umber System
JavaScript uses a 32-bit floating-point representation for numbers, as shown in Figure 3-­1.
In this example, the value is 0.15625. The sign bit (the 31st bit) indicates that the number
is negative if the sign bit is 1. The next 8 bits (the 30th to 23rd bits) indicate the exponent
value, e. Finally, the remaining 23 bits represent the fraction value.

Figure 3-1. The 32-bit floating-point number system


21
© Sammie Bae 2019
S. Bae, JavaScript Data Structures and Algorithms, https://doi.org/10.1007/978-1-4842-3988-9_3
Chapter 3 JavaScript Numbers

With the 32 bits, the value is computed by this esoteric formula:

æ 23
ö
value = ( -1) ´ 2e -127 ´ ç 1 + åb23 -t 2 -t ÷
sign

è t =1 ø

Figure 3-1 shows the following break down of the 32 bits:


sign = 0
e = (0111100)2 = 124 (in base 10)
23
1 + åb23 -i 2 -i = 1 + 0 + 0.25 + 0
i =1

This results in the following:

value = 1 x 2124-127 x 1.25 = 1 x 2-3 x 1.25 = 0.15625

With decimal fractions, this floating-point number system causes some rounding
errors in JavaScript. For example, 0.1 and 0.2 cannot be represented precisely.
Hence, 0.1 + 0.2 === 0.3 yields false.

1  0.1 + 0.2 === 0.3; // prints 'false'

To really understand why 0.1 cannot be represented properly as a 32-bit floating-­


point number, you must understand binary. Representing many decimals in binary
requires an infinite number of digits. This because binary numbers are represented by 2n
where n is an integer.
While trying to calculate 0.1, long division will go on forever. As shown in Figure 3-­2,
1010 represents 10 in binary. Trying to calculate 0.1 (1/10) results in an indefinite
number of decimal points.

22
Chapter 3 JavaScript Numbers

Figure 3-2. Long division for 0.1

JavaScript Number Object


Luckily, there are some built-in properties of the Number object in JavaScript that help
work around this.

Integer Rounding
Since JavaScript uses floating point to represent all numbers, integer division does not work.
Integer division in programming languages like Java simply evaluates division
expressions to their quotient.
For example, 5/4 is 1 in Java because the quotient is 1 (although there is a remainder
of 1 left). However, in JavaScript, it is a floating point.

1  5/4; // 1.25
23
Exploring the Variety of Random
Documents with Different Content
yngre upplaga af båda könen var samlad. Gungan, med afdelning för
två personer, var nu upptagen af Lovisa, som satt och Walter, som
stod och kallade.

Alltid lika intagen af sina teaterprojekter, anmärkte fröken Nora,


att ingen passade bättre än dessa två till de båda älskande i
Kotzebue's "Brodertvist" som nu var på förslag.

— Hvilken roll ämnar du välja sjelf? frågade den yngre fröken S.,
— du må väl inte tänka bli gamla Griponia heller!

— Hvarföre icke det, det kommer ju blott an på, om man spelar


sin roll väl, menade Nora, — och gammal blir man nog genom ett
och annat streck i ansigtet.

— Fy döden! utropade en af de andra damerna, som… sagt i


parentes… säg bäst ut af dem allesammans. — Just derföre, att man
skall smeta till sig i syna, undanber jag mig alltsammans. Äfven
anser jag denna pjes vara alldeles opassande, med dess många
karlroller och att klä ut sig i karlkläder! Nej, jag tackar, derpå går jag
icke in.

— Få teaterstycken äro så passande som denna, försäkrade Nora,


— ämnet är allvarsamt och moraliskt, och utom den burleska scenen
emellan fru Griponia och advokaten uteslutes allt anstötligt. Hvad
kostymen angår, uppträder en af de gamla herrarna i nattrock, den
andra i syrtut, matrosen spelas af Marenius, och advokaten af
August Bryller.

— Och hvem af oss, menar du väl, vill åtaga sig de gamla


gubbarna? Låt
Walter spela den ena och fendrik U—— den andra.
— Det går icke an, svarade Nora, då skulle väl hela familjen U.
vara närvarande som åskådare och det önskar ju ingen af oss, eller
huru? Och hvem skulle då i Walters ställe bli älskare?

— Å den rollen kunde jag kanske få lust till, sade den unga
damen, som förut talat om obehagligheten att — smeta till sig.

— Men då måste du ju äfven måla dig, anmärkte den äldre fröken


S., och jag tviflar att mamsell Bryller blir nöjd med en sådan älskare,
— det ser ingalunda så ut, tillade hon litet försmädligt.

Denna anmärkning kom dem alla att se mot kastgungan. Lovisa


hade stigit upp, stödjande sig mot mellanstolpen. Walter höll sin
vänstra arm omkring hennes lif och kastade gungan med en sådan
kraft och skicklighet, att den gick till halfcirkeln. — Fröken S. fortfor:

— Den som så låter famna om sig, är visst icke nöjd med en


utklädd älskare; — och jag begriper icke huru baron tillåter ett så
eget uppförande af denna Walter; hans far skall, efter hvad jag hört,
vara någon slags källarmästare eller dylikt.

Ingen svarade på denna frökens anmärkning. Walter och Lovisa


lemnade rum åt ett annat par, och Lovisa, som blef varse den nyss
omtalade gruppen, skyndade dit och blef mottagen med stor
vänskap och hjertlighet.

Nora föreslog då på skämt ett ombyte af älskarerollen. Lovisa


antog förslaget med nöje, och ville göra det till alfvare.

— Ser du, hviskade den yngre fröken S. till sin syster — nu var
återigen din bitterhet på orätt ställe.
Walter vandrade för att svalka sig i en af sidoallleerna, der
genmöttes han af Marenius, och båda togo vägen till en liten
skogspark, för att ohörde få språka bort en stund; efter ett och
annat likgiltigt prat frågade Marenius:

— Nå, Walter, får man snart gratulera dig?

— Hvartill?

— Till en vacker och rik brud, och survivance l pastoratet efter


svärfar.

— Oändeligt gerna till det första, om det bara låter göra sig, men
till det sednare har jag ingen lust.

— Den kommer väl också med tiden, och dig hindrar ingenting. —
Philosophie magister är du, en omtyckt talare på predikstolen, och
nu erbjuder sig ett ypperligt tillfälle, som hundra andra i ditt ställe
skulle taga emot med uppräckta händer, icke kan du vara rädd för
hvad du ännu behöfver lära! Engång för alla, säg mig uppriktigt,
hvad har du emot detta stånd?

— Mycket, och litet, allt huru man vill taga det, men låtom oss
lemna det derhän, ty närmare hvarken kan eller vill jag ej för dig
utreda mina åsigter af saken. Ett skäl kan jag likväl gifva dig: min
förkärlek till poesi och litteratur.

— Du skämtar, huru många andeliga män äro icke utmärkta


litteratörer.
En Franzén, en Wallin, en Tegnér…

— Ja, om jag kunde följa deras fotspår…


— Och bli biskop, menar du? Du syftar högt! men hvem vet, du är
ung och har gynnare…

— Hvarföre vill du söka öfvertala mig att blifva prest? frågade


Walter med forskande blick.

— Af vänskap och till din egen fördel. Alla apparencer äre ju äfven
gynnande; du är omtyckt i församlingen, och prosten önskar dig till
sin adjunkt. Hvar och en kan se att du tycker om Lovisa, och att hon
snart, om icke redan, besvarar din kärlek. Detta ser hennes slägt,
och tiger, — den som tiger, samtycker; hvad önskar du mer? Vore jag
icke din vän, kunde jag nästan afundas dig, om en sådan känsla
ägde rum i min själ. — Du har rätt, och likväl… Jag vill tänka
närmare på saken.

— Gör så, och låt mig veta ditt beslut, sade Marenius och
aflägsnade sig för att gå baronen till mötes, som syntes på något
afstånd.

Walter blef stående några ögonblick, och såg efter den


bortgående. — Du kunde afundas mig! o, visste du huru mycket jag
afundas din egen sinnesfrid och lättro!

*****

I en rymlig berså sutto fruarna omkring ett bord, läskande sig med
de utvaldaste bärsorter från trädgården. Talet föll på den för Lovisa
tillställda surprisen i ekparken, och i anledning deraf nämnde
prostinnan, att den såkallade "dragon Lotta," som deltagit i sången,
nu vore ganska illa sjuk. Hon sade, efter att hafva arbetat hela
dagen på åkern, vakat om natten, för att binda kransarna, andra
dagen varit till biträde i köket och uppassningen vid bordet. — Nog
såg jag att flickan ofta skiftade färg, fortfor den goda frun, — och
varnade henne, att ej förkyla sig efter dansen. Utan att vänta på de
andra flickorna sprang hon likväl hem, så tunnklädd hon var, men
kom icke långt, ty kyrkovårdens döttrar funno henne sanslös
liggande vid gångstigen, som går genom deras äng. Hon måste
bäras hem; nu har hon stark feber och yrar beständigt, säger
modren. Ännu har jag icke velat underrätta Lovisa om Lottas
sjukdom, som kanhända är smittosam.

Sällskapet ökades genom baronen, som, åtföljd af Walter och


några andra herrar, inträdde medan prostinnan ännu talade. —
Stackars flicka! yttrade den förstnämnde deltagande, — redan i
afton låter jag ett bud gå till doktor L. och glöm icke, Laura lilla, att
höra efter Lotta. Hennes far var en bra karl, och tapper soldat, och
miste sin arm i kriget mot ryssarna 1808… med denna underrättelse
vände baronen sig till Walter, men denne hade aflägsnat sig.

— Vet du, Mauritz, sade friherrinnan till sin man samma afton, när
de voro allena. Jag tror fullt och fast att Lottas sjukdom härrör af en
dold passion för magister Walter.

— Ack, min lilla Laura, inbilla dig icke att en frisk och rask finsk
landtflickas hufvud är uppfylld af alla dessa ack och o, som spökar i
edra tankar, ni, som läsen "La Fontaines romaner", skämtade
baronen och kysste sin fru, som suckade:

— Ack, de hårda känslolösa männerna!…

Många hade anmärkt, att Walter mot aftonen varit ur humör;


Marenius förmodade att detta var en följd af deras samtal, ehuru
han ej kunde utgrunda orsaken; Lovisa trodde att Nora redan
underrättat honom om rollernas ombyte, och att hans missnöje
härrörde deraf. Hon var smått harmsen på sig sjelf, som gått in på
byte; att hon så snart gillat detta förslag, var blott en flyktig artighet
mot fröken, och på det de andra flickorna ej måtte tro att Lovisa så
oändeligt gerna ville ha Walter till älskare, hvilket de säkert eljest
hade sagt.

Andra dagen var det postdag, det vill säga den dag, då härifrån
afgick ett bud till närmaste postkontor, för att afhämta de bref, som
tillhörde dem bland sockneboerne, hvilka förenat sig om denna
inrättning, äfvensom att aflemna deras egna. Lovisa skref hela
morgonen till en af sina förra pensionskamrater i Åbo, så väl för att
uppfylla ett gifvet löfte, som af ett för unga flickor vanligt behof, att
meddela sig åt någon vän.

Brefvet handlade om resan, festen och de bekantskaper hon


förnyat med grannarna — allt under liflig saknad af hvad hon
lemnat…

Postscriptum innehöll följande:

"Föreställ dig min öfverraskning, då jag här såg den gentile


Walter, för hvilken ni alltid brydde mig så snöligt. Han är nu
här hos oss såsom informator för mina bröder. Han, som alla
ansågo för så rik och oberoende!… Skratta du, och kalla mig
egenkär åter, om du så vill, men jag tror att något ligger
under denna tillställning. Huru många romaner och komedier
utveckla ej sådana intriger?" … … …

"Apropos af komedi och spektakler! Jag torde snart komma


att uppträda som prima donna vid en liten sällskapsteater på
Holmsjögård. Mera en annan gång, från din vän
Lovisa."

Samma dag var Walters tid så upptagen af skrifning för egen


räkning och af disciplarnes undervisning, att han blott visade sig
under middagen och som alla anmärkte, synbart förstämd.

På eftermiddagen vandrade han, för att besöka ryttmästaren, som


var opasslig och ej varit med i gårdagens sällskap hos baronen.

Walters väg förde honom förbi Dragontorpet. Villrådig stannade


han vid den gångstig, som förde till stugan. Då såg han Lottas mor
komma utför den väg han lemnat, bärande en kruka med vatten,
som hon hemtat från en aflägsen källa. Han inväntade henne, och
frågade huru det nu stod till med hennes dotter.

— Dåligt, mycket dåligt, herr magister, svarade hon bedröfvad. —


Hon yrar allt jemt, och klagar öfver en så brinnande törst, och fastän
både prostinnan och i dag baronessan varit så hederliga och skickat
henne så rara soppor, vill hon blott ha kallt vatten, från källan i
Kyrkby ängen; derifrån kommer jag nu…

— Hvad säger hon då under sin yrsel? frågade Walter, icke utan
att litet sväfva på målet.

— Ja, hvem kan få reda på sådant, menat magistern? Ofta ropar


hon på mamsell Lovisa, ja till och med på magistern sjelf. Talar om
blommor, kransar, hjertan och dylikt. Ibland vill hon ha papper, och
säger att hon skall skrifva till mamsell Lovisa…

— För all del i verlden! låt henne icke få sin vilja fram, varnade
Walter ifrigt. — Hon kunde under er frånvaro skicka någon med en
sådan billet, uppfylld af galenskaper, till mamsell Lovisa, som ännu
är okunnig om er dotters sjukdom. Man är högst ängslig, för att hon
skall komma hit, då sjukdomen säkert är smittosam… Jag går nu till
ryttmästarbostället, och träffar der, som jag tror, doktor L. I sådant
fall, ber jag honom komma hit…

— Ack, han var här redan i morse, och skref ett långt recept, som
Post-Ante tog med sig, då han for bort i middags. Doktorn säger det
vara scharlakansfeber.

— Så mycket mer skall ni akta mamsell Lovisa ifrån att komma till
er dotter, och nu Guds frid! Han gick, men vände snart åter om. —
Ge ingalunda skrifdon åt Lotta, varnade han ännu en gång — ty så
nyttig skrifkonsten är för en frisk, så farlig är den för en febersjuk
menniska.

— Ja, nog har magister Brummerus haft besvär att lära Lotta både
räkna och skrifva, men få nu se hvad nytta hon har af det? Jag tror
aldrig hon kommer sig mer, sade modren och torkade bort tårarne
med afvig hand.

— Misströsta ej! hon är ung och stark, sade Walter och gick —
hvad han tänkte och önskade veta vi ej.

Postbudet återkom, och medförde nedanstående bref till Walter:

T——s 182..

'Min käre son!

När jag gillade ditt beslut, att på obestämd tid taga


kondition hos prosten Bryller, var det min tanke, att snart
kunna lämna dig en ansenlig penningremiss, för att kunna
hjelpa dig framåt, på den bana du beslutar välja för
framtiden. Orolig öfver ditt obeslutsamhet, tyckte jag du der
kunde hafva tillräcklig tid och rådrum att besinna dig på detta
val, utan att frestas till öfverflödiga utgifter, tills du uppnått
den af dig sjelf bestämda åldern af 24 år, hvilket snart
inträffar; men ett gammalt ordspråk säger att "menniskan
spår, och Gud rår!" och så är det äfven här…

Jag har väl aldrig med tydliga ord talat med dig om mina
affairer, men nog måste du, med din skarpsynthet, insett att
dessa på långt när icke äro så goda, som man i allmänhet
trott. Min kredit är i aftagande och flere f—bannade konsis…
men hvarföre berätta dig saker, som du icke förstår? — Nog
af, för att icke bli ruinerad, måste jag i det längsta behålla det
yttre skenet, och alla apparencer äro klena. Jag har alltid
förmodat, att du icke haft någon böjelse for prestståndet och
äfven sjelf aldrig tänkt ditåt, men en sådan har dock alltid ett
säkert brödstycke, och munläder felas dig icke…

Jag har låtit underrätta mig, att din principal är gammal och
rik, och har en ung och vacker dotter. Det vore ju en god
spekulation för dig!

Din mor ber dig äfven tänka på den saken'…

Detta bref bestämde Walters beslut, och några ord, framkastade


till Marenius, som åter förde dem till baronen, voro tillräckliga att
befordra planens framgång.

Att Lottas sjukdom länge ej kunde blifva någon hemlighet för


Lovisa, inser man lätt; men frånvaron och förströelser hade hos
henne afkylt barnavänskapens värma, och fruktan för smitta kom
henne kanhända väl till pass, då hon under denna tid var intagen af
nya tankar och känslor, likväl lät hon dagligen genom bud underrätta
sig om Lottas tillstånd.

Ung, liflig och oerfaren, intagen af Walters förledande egenskaper,


var hon smickrad af den uppoffring han gjorde för hennes skull; ty
Walter hade med så mycken klokhet låtit påskina, att blott hans
innerliga kärlek till henne var orsaken hvarföre han försakade att
välja en annan bana, der hans kunskaper och relationer kunnat föra
till en högre och utmärktare verkningskrets, så att han i utbyte, för
sitt bifall till prostens önskan, erhöll löfte på dottrens hand, om han
kunde vinna hennes hjerta. Hon egnade honom således nu den
hängifvenhet och uteslutande dyrkan, som föremålet för den första
kärleken alltid erhåller af det unga hjertat, när det finner sin känsla
besvarad, och inbillade både sig sjelf och andra, att han redan i Åbo
intresserat henne mer än någon annan.

Hvarföre och hvarigenom, det frågade ingen; de funno det så


naturligt, att en ung man, med Walters utseende och behagliga
verldsmannatakt, intagit en ung flicka.

Hade Lovisa, mer än andra flickor af hennes ålder och i de


förhållanden hon vuxit upp, kunnat analysera sina bevekelsegrunder
och känslor — med en uppriktig sjelfpröfning, då skulle denna
ungefär varit så hår:

"I hemmet gjorde man allt, för att göra mig bortskämd och
egenkär. Ingen var välkommen hos mamma, som icke förstod att
fjäsa för mig, ifrån det jag lemnade vaggan. Onkel skämtade alltid
öfver äldre flickor, sade att jag måste bli brud vid 15 år och talade
oupphörligt om vackra och rika friare; skrattade åt sin frus åsigt om
själens sympati, och att man kan vara förnöjd med litet, blott man
njuter det med den man älskar. Han kallade det för idel
romangriller…"

"Jag hade från barndomen lärt mig att högt uppskatta onkels
omdömen; ty pappa, — det har jag nog blifvit varse — gör alltid som
denne vill. Väl runkade pappa alltid missbelåtet på hufvudet, när
onkel talade om pensions-resan, men den skedde likväl. Onkel
spådde också alltid, att jag der skulle väcka uppseende, och föra
hem en elegant fästman. Nå väl, det har jag äfven gjort, ty positift
kom Walter för min skull hit."

"Hvem var väl mera omtalad och observerad af alla, än Walter?


hvem klädde sig med mera smak? hvem dansade bättre? hvem
arrangerade ett lustparti bättre, än han? Derföre var han äfven
omtyckt af damerna, och afundad af sina kamrater. Visst var det ock
några af de förra, som ville veta att han var vidlöftig och sjelfkär,
men det var säkert derföre, att han ej brydde sig om dem."

"Ma-bonne hade tyckt så med, men snart blef han en af hennes


favoriter och alltid bjuden på hennes små tillställningar; han gjorde
deremellan visiter, och språkade då om poesi och dramatik, för
hvilken hon svärmade. I början syntes han knappt märka mig, men
på en gäng blef han uppmärksamheten sjelf, och alla, till och med
Ma-bonne, brydde mig jemt för honom."

"Ack, om de nu visste att jag är hans fästmö, huru många af


flickorna skulle lite då afundas mig! Så snart vi bli gifta, måste han
föra mig till Åbo på en liten tid; vi göra då visiter hos våra bekanta."

"Hvilket uppseende jag skall väcka med min vackra man och valda
toalette! Det är väl sant, att på visitkorten endast kommer att stå:
pastor Walter med fru; — men onkel säger, att han nog går till
Biskop, med tiden! Om han icke blir Biskop, kan han åtminstone bli
prost eller Professor…"

Men Lovisa var icke tillvand att göra sig reda för det förflutne. Hon
lefde i det ljufva närvarande, med ett ungdomligt sinne, med
framtiden och dess nöjen i perspektiv. Ingen hade med allvar upplyst
henne om hennes tillkommande pligter. "Vett och förstånd kommer
nog med åren," var prostinnans favorit-term.

*****

Lotta höll nu på att tillfriskna; hennes ungdom hade segrat öfver


den häftiga sjukdomen, men den hade qvarlemnat bedröfliga spår.
Hennes bröst hade lidit, håret lossnat, och tungsinthet hade lagt sig
öfver hennes själ, som förundrade alla, till och med den erfarna
läkaren.

Då all fara var förbi, besökte hon Lovisa, som rördes ända till tårar
öfver att finna henne så förändrad. All den skönhet, som frapperat
Lovisa vid åsynen af Lotta, då hon såg henne första gången efter sin
hemkomst, var nu sin kos.

Gerna hade Lovisa meddelat Lotta nyheten om sin förlofning, men


hon hade gifvit både Walter och sina föräldrar ett löfte att ej yppa
det ännu så tidigt. Föreningen var utsatt till nästkommande första
Maj, och Walter väntade blott på att prestvigas, för att med allvar
egna sig åt de förrättningar som åtfölja lärarekallet. Emellertid hade
han högeligen önskat att deras förbindelse skulle hållas hemlig, och
då äfven föräldrarne tyckte det vara bäst, att den ej så tidigt blef ett
samtalsämne för socknen, förstod Walter, i andras närvaro, så väl
spela den fremmande, att ej engång husets betjening anade rätta
förhållandet.
En morgon, i slutet af September, gick Lovisa åter för att se efter
Lotta. Af modren, som hon mött på vägen, hade hon hört att Lotta
haft en orolig och sömnlös natt, hvarföre modren fruktade för ett
återfall af feber.

Då Lovisa inträdde i stugan, höll Lotta ett skrifvet papper i


handen; det var de verser man sjungit på Lovisas namnsdag och
som Walter hade skrifvit.

— Jag har så många gånger ärnat fråga mamsell, om obelisken


ännu står qvar, sade Lotta.

— Redan andra dagen togs den bort, svarade Lovisa, — men


kransarna hängdes på träden, till ett minne.

— Påminner mamsell Lovisa sig den önskan jag yttrade när vi


stodo der?

— Det gör jag icke. Du måste komma mitt minne till hjelp.

— När mamsell sade, att tillställningen liknade en grafvård,


önskade jag att få hvila der; vill mamsell, när jag är död, laga så, att
jag får denna önskan uppfyld!

— Kära min flicka, tala ej så der besynnerligt, inföll modren, som


nyss kommit in och hört dessa ord. — Nog blir du med Guds hjelp
frisk och rask igen, och när du dör, sä må du väl få ligga i vigd jord,
du som andra, och ej bli begrafven som ett kreatur i skogen.

Lotta teg, men smålog sorgset. Sedan modren gått ut, sade hon:

— Det är kanhända barnsligt af mig, men jag tycker att jag der
skulle hvila så skönt…
Lovisa ansåg det vara bäst att gå in i den sinnessjuka flickans
idéer, och sade vänligt:

— Du bör icke oroa din mor med att prata sådant, men om du dör
förr än jag, och jag kan uppfylla din önskan, så gör jag det.

Lotta tog hennes hand, tryckte den hårdt och sade blott:

— Tack!

På hemvägen mötte Lovisa Walter, som sökte henne, för att med
all försigtighet underrätta henne, att prosten, som om aftonen förut
lagt sig frisk och munter, om natten blifvit rörd af slag. Lovisa hade,
för att njuta af den vackra morgonen, gått ut så tidigt, att hon ej
enligt sin vana helsat på sin far, som alltid låg länge om morgnarna.

Walter satte sig genast till häst, för att i flygande fart rida till deras
läkare. Lovisa ilade till fadrens sjuksäng.

När läkaren kom, närmare afton, tröstade han de sörjande med


den försäkran, att prostens lif denna gång var utan all fara, och att
han hoppades att sjukdomen snart skulle ha en öfvergång, likväl
förmodade han, att en länge vidhållande slapphet och ett häftande
på målet blefve en säker följd af denna attack.

Denna händelse föranledde behofvet af en skicklig medhjelpare,


o<h Walter påskyndade nu sin examen och prestordination så
mycket som möjligt, hvarföre han ock genast reste till ———.

Att Walter, under den tid han beredde sig till denna afgörande
resa, märkbart förlorat sitt förra sällskapliga lynne och sällan
lemnade sitt rum, ansågs för en naturlig följd af hans trägna studier;
likväl fällde Lovisa mången tår af ledsnad, der han satt vid fadrens
sida, för att roa honom med läsning i, för hennes barnsliga sinne, allt
för allvarsamma ämnen, hvilka hon egnade så ringa
uppmärksamhet, att hon äfven mången gång, af den numera af
sjukdomen kinkig blifna gubben, erhöll förebråelser för tankspriddhet
och ett för mycket verldsligt sinne. Lovisa trodde att hela verlden
hade förändrat sig.

Hon hade icke varit på länge hos Lotta, som nu äfven var bättre,
men, efter hvad hennes mor, som ofta var i prostgården, sade, ännu
var utan krafter till att arbeta.

— Hon roar sig emellanåt med sin skriföfning, och syr ibland på
några för länge sedan beställda prestkragar, sade gumman.

Den enda af sina fordna lekkamrater och bekanta Lotta numera


gerna såg, var kyrkovårdens Elsa, som stundom kom till henne.

Ehuru förlofningen emellan Walter och prostmamselln ännu ej


blifvit offentliggjort, kunde dock ingen förbjuda menniskorna att
gissa och prata: här som annorstädes, förlofvade, ja, till och med lät
man ofta ryktet förelysa folk, innan kontrahenterna kanhända ens
tänkt på saken.

En inre aning, kanske äfven någon visshet, att Lotta tyckte om


Walter, hade afhållit Elsa ifrån att meddela henne de rykten, som
voro gängse, om en förlofning emellan honom och Lovisa. Elsa var
sjelf brud, och finkänslig nog att finna, det en sådan nyhet skulle
vara sårande; hon hade skickligt nog öfvertalt Lottas mor, att aldrig
tala derom med sin dotter. Lottas mor var också icke någon som
pratade i fävitsko. Hon var en af dessa tystlåtna, reflekterande
qvinnor man ofta finner bland finska allmogen.
En afton efter Walters bortresa titt ——— gick Elsa åter till torpet;
hon fann der före sig en grannqvinna, hvilken som en afgjord sak
omtalade prostmamsellns förlofning och snara bröllop med
magistern. Lotta satt blek och tyst, men hennes frågande blick sökte
i vännens ansigte bekräftelse på hvad hon hörde. Elsa sade då, att
detta endast var ett löst rykte, som förmodligen härrörde deraf, att
herr Walter rest bort för att ta examen och låta prestviga sig, för att
under prostens sjuklighet kunna sköta dennes syssla.

Lotta skrattade nästan hemskt, tyckte Elsa, men sade blott de


orden: "vacker prest!"…

— Då blir säkert Elsa den första brud, som den nya presten
kommer att läsa vigselorden öfver, menade grannqvinnan, som icke
hört Lottas ord.

Lotta satt sedan tigande och dyster, tills Elsa skulle gå; då slog
hon armarna om hennes hals och hviskade:

— Hans välsignelse ger ingen lycka! — Men jag skall be Gud för
dig, att du blir en lycklig brud; bed du Honom också för mig, det kan
behöfvas!…

Elsa gick, utan att veta hvad hon skulle tänka; det sannolikaste var
att Lotta åter yrade, men tyvärr erhöll både hon och andra snart en
förfärlig upplysning om Lottas ord.

Detta passerade om Thorsdags afton. Tidigt om Lördags


morgonen kom Lottas mor till prostgården och frågade om hennes
dotter var der, men fick ett nekande svar. Gråtande berättade hon
då, att sedan hon och Lotta lagt sig om aftonen förut, hade den
sednare åter stigit upp, och modren hade äfven i sömnyran hört att
hon öppnat och tillslutit stugudörrn, men fäste sig icke vid detta, ty
Lotta hade, den sednare tiden, ofta vankat orolig omkring i rummet.
Men när hon sjelf helt bittida steg upp, för att börja baka och sätta
eld i ugnen, då var Lottas bädd tom, och den yttre dörrn ostängd.
Nu hade hon och lilla Janne fåfängt sökt henne ikring hemmet och
hos de närmaste grannarna, men ingen hade sett henne. Modrens
sista hopp hade varit att finna henne här, och hon vred nu sina
händer i stum förtviflan.

Det blef en allmän uppståndelse. Prostinnan skickade ut folk, för


att söka den saknade, men alla kommo med oförrättadt ärende
tillbaka. Man måste beväpna sig med tålamod och afvakta tiden,
menade alla.

Oaktadt sin kärlek för systern, och den ångest, hvari han såg
modren vara, glömde lilla Janne bort icke sitt nya flarnskepp, som
han lät segla i en liten grund vid af Holmsjön. Snart blef han varse
något som stöt på vattnet och af vinden sakta fördes till stranden.
Det var en vissnad krans af törnrosor och blåklint, och gossen
igenkände den genast för densamma Lotta burit, då det stora
kalaset var i prostgården. Häpen öfver att finna den här, tog han
både krans och båt, för att skynda till modren, men upphanns på
förvägen af vagnen från herrgården. Deruti satt baron och hans fru,
som ämnade sig till prostgården; äfven de hade redan hört om
Lottas försvinnande. Gossen, som de genast igenkände, tillfrågades
om man fått reda på henne.

— Icke som jag vet, svarade han, — men här har jag hittat Lottas
blomkrans i vattnet vid sjöstranden; nog har hon sjelf burit dit den,
ty i aftons hängde den ännu på stuguväggen.
— Milde Gud, förbarma Dig! ropade baronessan och vred sina
händer.
— Då har hon säkert gått och dränkt sig!…

Gossen började gråta. Kusken fick befallning att taga honom upp
vid sin sida, och man skyndade till prostgården.

Der utbredde deras sannolika förmodan en allmän förskräckelse.

Folket sändes ut med båtar och ekstockar, för att eftersöka med
noten; de funno ock mot afton den olyckliga flickans lik. Hon var
klädd i samma hvita klädning, som hon burit den så ofta omtalta
dagen, hvilken syntes hafva varit en vändpunkt i hennes lif.

Sedan man förgäfves försökt alla medel att återkalla Lotta till
lifvet, fördes hon hem till torpet. Ännu en gång skulle hennes
hvilosäng bäddas i modershemmet.

*****

Holmsjögårds herrskapet intog som vanligt sin söndagsmiddag i


prostgården, äfvenså Marenius, som predikat högmässan och dervid
hållit ett varmt och uppbyggligt tal öfver den olyckliga händelsen.

Man beklagade modren, undrade hvad som kom åt flickan och


talade slutligen om hennes begrafning. Enligt gammal sed borde hon
i all tysthet få sitt hvilorum i det hörn af kyrkogården, som är
bestämd för sjelfspillingar.

Icke utan en rysning erinrade Lovisa sig Lottas sista bön till henne,
och sitt eget löfte, men framställde det likväl som sin egen önskan
för de närvarande, sägande, att om det vore enligt med hvad
kyrkolagen tillät, skulle det säkert vara långt mindre smärtande för
modren, och äfven för Lottas bekanta, om hon begrafdes på ett
ställe som icke ansågs för nesligt.

Prostinnan satte sig i början mycket emot förslaget, men då Lovisa


tog henne afsides och förtrodde henne, att det varit Lottas allvarliga
önskan, så verkade vidskepelsen mer än Lovisas böner och hennes
svägerskas öfvertalande. Mången tror ännu i dag, att om ej den
döende erhåller det hvilorum den önskat sig, finner den ingen ro i en
annan graf.

Dagen derefter hemväntades Walter från sin resa. Lovisa, åtföljd


af sina bröder, for honom en half mil till mötes med vagnen. När det
första glada återseendet var förbi, och han intagit fjerde platsen i
vagnen, underrättades han om hvad som händt under hans frånvaro.
Den blekhet, som dervid betäckte hans ansigte, tillskref Lovisa hans
deltagande öfver ett sådant olycksfall i allmänhet, och uppbjöd hela
sin förmåga att muntra och förströ honom; hon lyckades omsider, i
det hon talade om den högtidlighet, hvarifrån han nu kom.

De voro redan hemma, och modren närvarande, när Lovisa


frågade, om han ville uppfylla en bön af henne. "Hvilken önskan
skulle väl min dyrkade Lovisa kunna hafva, som jag icke ville
uppfylla, om det står i mensklig förmåga," försäkrade han. Hon bad
honom då inviga det omtalta stället i parken till graf åt Lotta, och
jordsätta henne der.

Han studsade, — detta hade han icke förmodat. Hans löfte var
likväl redan gifvet, och han bekräftade det med ett hastigt "Ja", men
aflägsnade sig.

När Walter om afton som upp i sitt rum, såg han ett ljussken
glimma mellan träden i den aflägsna parken. Det var dödgräfvarens
lykta.

— Med denna förrättning skall jag således tillträda mitt ämbete,


sade han för sig sjelf, med en ovillkorlig rysning. — Skall detta vara
ett omen? Det är bara vidskepelse och inrotade fördomar, som den
upplyste sätter sig öfver. Likväl är det lyckligt, att ingen synes ha
någon aning om att jag är en omedelbar orsak till flickans död, —
men hvad rår jag för det att den tokan tog allt för allvar, hvad jag
sade henne, och hvad jag sagt så många andra förut. — Nå, vacker
var hon, och älskade mig uppriktigt, som jag tror, och skulle icke
Lovisa varit, så… hvem hvet huru allt nu varit. — Jag vore icke prest
nu, icke bunden vid… Jag vore fri, och Lotta hade nog följt mig, ty
hennes hjerta var för blodigt att trifvas här, och fåfäng var hon, som
hvarje annan qvinna. I en stad hade hon icke fallit på den dårskapen
att dränka sig. Hon skulle nog tröstat sig, — om jag blifvit henne
otrogen, — och betalt lika med lika.

Så sökte han genom sophisterier att tysta ner den röst, som
anklagade honom, när han var allena; men åsynen af Lovisa
skingrade genast alla mindre behagliga känslor, och på fullt allvar
fattade han den föresatsen, att vara henne trogen och i hennes
kärlek finna sin lycka.

Hela familjen, Lottas mor och tjenstefolket i prostgården voro


närvarande vid ceremonien. Walters yttre var högtidligt och — lugnt;
det inre skådade blott den, som utgrundar själens djupa gömmor.

Baronessan var den enda bland familjen, som misstänkte att en


hemlig kärlek varit i fråga emellan honom och den döde. Hon
betraktade derföre Walter med forskande blick; men ingen mine,
intet ord förrådde något närmare deltagande, hvarföre hon trodde
sin misstanke vara ogrundad, så vida den rörde honom, men behöll
sin öfvertygelse om Lottas böjelse för honom.

Jorden hade inneslutit den olyckliga Lottas stoft i sitt moderliga


sköte. Först hvirflade de gula löfven, upprörde af November-
stormen, i vilda danser öfver den ensliga grafven, sedan kom vintern
med sitt hvita täckelse och söfde dem till ro. — Så är det äfven med
sorgen i menniskans hjerta; den utbryter först i klagan och jämmer:
då kommer tiden, som lugnar och betäcker allt med sitt välgörande
hölje… men äfven goda menniskor bidraga med sin omsorg till det
försonande varfvet…

Så var det äfven nu, i anseende till Lottas mor; Marenius föreslog
en insamling, på det art gumman kunde göra en resa till sina
slägtingar i Österbotten, … och ingen deltog ifrigare i detta förslag
än Walter.

Baron tog gossen till sig, till dess han kom till den ålder att han
kunde komma i någon handtverkslära. Sålunda tröstad, öfver sin och
lilla James framtid, hade hon rest bort, sedan hon bedt prostinnan
om rum för en kista på vinden i prostgården; den innehöll allehanda
saker, som hon icke nu kunde eller ville ta med sig, sade hon
gråtande. Man förmodade att de tillhört Lotta.

Hennes bortresa från orten var en lättnad för alla, hvilka gerna
ville glömma en så sorglig händelse, om hvilken hennes åsyn länge
varit dem en påminnelse.

Som läkaren förutsagt, tillfrisknade prosten efter hand såvida, att


han gick uppe, ät och drack som förr, men sjukdomen hade
qvarlemnat en slöhet i tanken och minnet, som tillika med ert svårt
häftande på målet satte honom ur stånd art sköta sin syssla. Allt
berodde således på Walters skicklighet och verksamhet, och han
visade sig äfven bördan vuxen. Han tog sockneskolan under sin
synnerliga vård, vann församlingens bifall till ett förslag om en
ändamålsenligare fattigvård, m.m. Oaktadt alla dessa göromål,
fortfor han att vara den omtyckte sällskapsmannen, den
uppmärksamma förtjusta älskaren, med ett ord, den fulländade
verldsmannen.

Vintern förgick fort nog. Prostinnan var ifrigt sysselsatt att rusta
med sådant, som anses nödigt för en ung och rik bruds utstyrsel,
men saknade mycket Lotta, som hon just låtit lära sy fina och
granna linne- och hålsömnader, på det att hon skulle ha nytta af
henne vid ett sådant tillfälle, sade hon, — nu måste hon anlita
fremmande dyrlejda personer…

För Lovisa försvann tiden under skämt, smek och omvexlande


förströelser, ty för att göra fröken Nora till viljes instuderade hon den
ena rollen efter den andra, utan att någon pjes likväl någonsin
fördes upp, ty teatersällskapet blef aldrig rätt ense om saken,
emellertid var man jemt sysselsatt med declamation, sångöfningar,
rollers inöfvande, omsorgen för garderoben och dylikt, och innan
man visste ordet af hade man den första Maj i händer.

Under Julhelgen hade kyrkovården hållit ett, hvad man på landet


kallar, "dundrande" bröllop åt sin dotter. Baron Y——s och
prostgårds-herrskapet, jemte nästan alla ståndspersoner deromkring
samt alla närmare och aflägsnare slägtingar och vänner till brudparet
voro bjudna. Marenius förrättade på Elsas uttryckliga önskan vigseln;
denna önskan föranleddes af Lottas sista ord till henne. Ehuru mörka
och obegripliga, ingåfvo de flickan en oförklarlig motvilja att låta viga
sig af Walter.
Vi ärna ingalunda besvära någon med en beskrifning öfver något
så trivialt som ett landtmannabröllop i vårt eget land. — Vår afsigt är
endast att låta våra läsare lyssna till tvenne — gummors prat.

Den ena är enka efter en hemmansbrukare i grannskapet; den


andra en treflig och allvarsam borgarhustru från Helsingfors, faster
till bruden och barnfödd i denna by.

Sedan dansen kommit väl i gång, satte sig de båda qvinnorna,


som icke råkats på flere år, i ett hörn af rummet, och språkade om
gammalt och nytt samt gjorde sina små anmärkningar öfver
brudparet och gästerna.

Brudsvennerne, eller som de här kallades marschalkarne, skulle


efter gammal sed se gästerna till godo, med att passa upp och
deremellan dansa med bygdens tärnor; men en af dem, en ung man
med ett hyggligt utseende och klädd i sjömansdrägt, syntes vara
antingen trött eller likgiltig för nöjet, ty så snart han tjenstaktighet
icke togs i anspråk, höll han sig aflägsen från det glada hvimlet.
Detta anmärktes snart af borgarmadamen, och hon frågade hvad del
var för en.

— Drar ni intet känsel mera till er egen gudson Erik? frågade den
andra. Det är ju min yngsta gosse; men det är sant… ni har ju inte
sett honom på flere år. Han var munter och rask då, men nu är han
en sådan hufvudhängare, som hvarken bryr sin om dans eller
lekstuga; det var göra nog med att få honom hit.

— När bror min i fjol vintras var hos oss i Helsingfors, sade han att
Erik var så vigilant och arbetade på att kunna lösa ut den äldre
brodren från hemmanet, efter dennes håg står till stadslifvet,
anmärkte den första.
— Ja det var då, det, svarade Eriks moder. — Ni minnes välan
dragonenkan, hon, österbottningskan, som baron lätte bo qvar i
torpet, sen man hennes blef död?

— Jo, jo, nog minnes jag dem begge två; ryssen högg ju armen af
honom i kriget. Det var ju deras dotter, som gick och dränkte sig i
somras?

— Det var i höstas. Den flickan gjorde både sin och andra mödrar
sorg, sade hon, och stötte den hoprullade hvita lärftsnäsduken mot
ögonen, och fortfor sedan: — Det var just för den flickans skull min
Erik stretade och arbetade dag ut och dag in, ty han var liksom
förtrollad i henne. Men Gud styrde nu, som alltid, till det bästa, ty
Lotta var ingen flicka som passade för Erik. Nog såg hon fager ut,
men högfärdsandan regerade inombords! Hennes tanke stod bara till
stadslifvet också, allt sen prostinnan kostat på henne och satte
henne i stan för att lära sy ut; sen var allt annat arbete för tungt och
simpelt, kan tänka.

— Jo, jo, så går det, anmärkte den andra. — Jag kunde berätta er
hundra sådana exempel ifrån vår stad. Alla sämremansbarn, som nu
växer upp, bli bara sjuklingar eller utsväfvande stackare, ty de lära
sig nu då att sy fint och grant, och ingen hålls mera till spinnrocken
och väfstolen, eller några sysslor; de som icke ha lust för sitt arbete,
löpa först omkring med försäljningsbröd, och passa sedan upp
sikterarna. Herrskaperna få antingen skaffa sig pigor från landet,
eller hålla till godo med sådana der som polisen nödgas drifva i
tjenst; — men huru var det med Lotta? Tyckte hon om Erik, hade
hon väl blifvit bättre med tiden; hon var ju ung ännu?

— Nog trodde gossen så, och för att snarare få pengar åt brodren,
for han bort i våras med en skeppare, som förde hans plankor och
annat virke till… jag mins icke nu hvad stället heter. Under tiden
förde olyckan hit den der presten ni nu ser dansa der med fröken
Nora, och som i vår skall gifta sig med prostens dotter. Nå väl, i
honom blef Lotta lika förtrollad, som Erik var i henne; och aldrig går
det ur mig, att icke det var för hans skull hon gjorde af med sig.

— Han tyckte då således om Lotta?

— Ja, hvem förstår sig nu på sådana herrar, och hvad de tycka och
inte tycka? Han, som talar så grant på predikstolen, att en stackare
inte förstår fjerndelen, kan nog prata öronen fulla på flickorna, utan
att just mena någonting. Lotta, som trodde sig vara klokare än vi
andra, blef väl också narrad…

— Han skall ju vara fasligt omtyckt i församlingen, och blir säkert


prostens efterträdare, sade svägerskan för en stund se'n, invände
madamen.

— Jo, jo, nog lär det så gå. Herrskaperna häromkring strömma till
kyrkan när han predikar, men vi enfaldiga menniskor, tycka ej att det
är det rätta Gudsordet! Tacka vill jag Marenius, se det är en prest,
det, både för fattiga och rika! men han skall bort härifrån, säges det.

— Hvad sa' Erik, när han som hem?

— Lotta var då illa sjuk, och han sörjde så förfaseligt, och ville gå
till henne, men hennes mor släppte honom icke in; ty doktorn hade
strängt nekat det, sa' hon. Då for han ut igen till sjös, ty han trifdes
icke hemma, och när han då kom tillbakas, var hon redan död. Nu
går han der och hänger hufvudet, och vantrifs, men det blir väl
bättre, ty han är en bra gosse, som fruktar Gud och hedrar fjerde
budet … …
Vi hafva troget anfört detta samtal, och lemna åt läsaren att sjelf
deraf draga sina slutsatser.

*****

Med glada förhoppningar på framtiden, gåfvo föräldrarne, på


deras adertonde bröllopsdag, sin dotter åt den af dem så firade
mannen. Baron Y., som skröt af att vara upphofven till denna
förbindelse, gnuggade händerna af fröjd. Alla voro således nöjda och
lyckliga. Vi gjorde kanhända bäst att sluta vår lilla novell under så
goda auspicier… men, "så många hufvuden, så många sinnen",
säger ett gammalt ordspråk; detta gäller äfven om läsare och
läsarinnor.

Derföre bedja vi dem, som endast och allenast läsa för sitt nöje,
och alltid önska ett godt och muntert slut på hvad de läsa, det vill
säga: med ett eller par bröllop, och der de unga paren försvinna från
skådeplatsen under smekmånadens sälla period, — att nu anse
berättelsen vara slutad.

De åter, som läsa för nyttan, i det de reflektera öfver menniskorna


och lifvet, och som vilja betrakta huru skörden beror på utsädets
godhet, hännvisa vi till följande blad.

*****

Vi förflytta läsaren tre år framåt i tiden.

Prosten Bryller är nu död, ett nytt slaganfall slutade hans dagar,


året efter hans dotters bröllop. Sönerna ha gått in vid militären och
äro borta hemifrån. Prostinnan, rask och kry efter sin hushållning
med samma drift och omtanka som förut. Som mor är hon allt lika
svag och fåfäng, och anser sin dotter för det mest älskvärda
fruntimmer. Väl medger hon att Lovisa alls ingen fallenhet har för
husets inre trefnad och vård, men lugnar sig dermed, att det vore
nog orättvist att fordra, det hon, ung och firad, en prydnad för
sällskapslifvet, genom sina behag och talanger, skulle tråka med
"Märtas bekymmer." — En annan sak hade det varit med henne
sjelf; en ringa bemedlad fröken, var hon en äldre halfsyster till Baron
Y. och berodde af hans godhet, tills hon inträdde som matmor i
prostgården. Hon hade således alltid fått gripa sig an; hon hade
äfven gjort det med nöje och haft den tillfredsställelsen, att äfven
derigenom se husets förmögenhet förkofra sig. — Men för hvem
hade hon stretat, om icke för sina barn. Gossarna hjelpte baron nog
fram i verlden; han var ju barnlös sjelf, — men hennes dotter skulle
nu bara glädja sig åt lifvet, menade gumman. Under det Lovisa var i
pensionen hade hon äfven, sin man ovetande, skickat mången nätt
summa för detta ändamål.

Lovisa njuter äfven nu i fullt mån af sin frihet, är upptagen af


besök och återbesök, leker med sin lilla flicka emellanåt, syr tapisteri
och virkar med perlor och gör blommor, för sig sjelf och till presenter
åt sina vänner. Deremellan spelar och sjunger hon, samt läser
romaner långt in på nätterna, med ett ord: sysselsätter sig som det
egnar ett barn af goda tonen.

Walter är omtyckt och firad af den högre klassen, aktad, ehuru


mindre älskad, af den lägre. Han för sig med det allvar och den
värdighet, som det egnar prosten Bryllers efterträdare.

Till sitt utseende har han betydligt förändrat sig, ty han har
magrat och fått en gulaktig anletsfärg. Stundom synes ett dystert
moln på hans panna, hvilket försvinner så snart han visar sig bland

You might also like