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
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
com
OR CLICK HERE
DOWLOAD EBOOK
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
https://ebookmeta.com/product/clinical-interviewing-6e-sixth-edition-
john-sommers-flanagan/
ebookmeta.com
https://ebookmeta.com/product/one-road-to-riches-haakon-gjerlow/
ebookmeta.com
https://ebookmeta.com/product/nationalism-referendums-and-democracy-
voting-on-ethnic-issues-and-independence-2nd-edition-matt-qvortrup-
editor/
ebookmeta.com
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
Introduction������������������������������������������������������������������������������������������������������������xxi
v
Table of Contents
vi
Table of Contents
String Shortening������������������������������������������������������������������������������������������������������������������������ 43
Encryption����������������������������������������������������������������������������������������������������������������������������������� 45
RSA Encryption���������������������������������������������������������������������������������������������������������������������� 46
Summary������������������������������������������������������������������������������������������������������������������������������� 50
vii
Table of Contents
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
ix
Table of Contents
x
Table of Contents
xi
Table of Contents
xii
Table of Contents
xiii
Table of Contents
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).
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
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 }
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 }
4
Chapter 1 Big-O Notation
• 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.
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.
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.
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.
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 }
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:
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(∞)
11
CHAPTER 2
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.
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.
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
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.
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.
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.
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
• undefined
• null
• true
• Non-empty strings
• Non-empty object
17
Chapter 2 JavaScript: Unique Parts
Here’s an example:
=== 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.
"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.
This is because functions and arrays cannot simply use the == operator to check for
equality.
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.
æ 23
ö
value = ( -1) ´ 2e -127 ´ ç 1 + åb23 -t 2 -t ÷
sign
è t =1 ø
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.
22
Chapter 3 JavaScript Numbers
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.
— 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!
— Å den rollen kunde jag kanske få lust till, sade den unga
damen, som förut talat om obehagligheten att — smeta till sig.
— 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:
— Hvartill?
— 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.
— 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.
*****
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.
— 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:
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.
— Hvad säger hon då under sin yrsel? frågade Walter, icke utan
att litet sväfva på målet.
— 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.
T——s 182..
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!
"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."
"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.
*****
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.
— Det gör jag icke. Du måste komma mitt minne till hjelp.
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.
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.
— 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.
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.
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.
*****
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.
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.
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.
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.
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…
— 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.
— 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…
— 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.
— 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.
*****
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.
*****
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