From 42523b8879b1635f9122d509419e6bcf64995855 Mon Sep 17 00:00:00 2001 From: Yudong Jin Date: Tue, 26 Dec 2023 18:28:26 +0800 Subject: [PATCH] translation: Add the translation of the data structure chapter (#1007) * Add the translation of the data structure chapter. Synchronize the headings in mkdocs-en.yml * Fix a typo --- .../basic_data_types.md | 164 ++++++++++++++++++ .../character_encoding.assets/ascii_table.png | Bin 0 -> 61596 bytes .../unicode_hello_algo.png | Bin 0 -> 20820 bytes .../utf-8_hello_algo.png | Bin 0 -> 27053 bytes .../character_encoding.md | 87 ++++++++++ .../classification_of_data_structure.md | 49 +++--- docs-en/chapter_data_structure/index.md | 10 +- .../1s_2s_complement.png | Bin 0 -> 21585 bytes .../number_encoding.assets/ieee_754_float.png | Bin 0 -> 24105 bytes .../chapter_data_structure/number_encoding.md | 150 ++++++++++++++++ docs-en/chapter_data_structure/summary.md | 33 ++++ docs-en/chapter_preface/suggestions.md | 2 +- .../character_encoding.md | 2 +- mkdocs-en.yml | 24 +-- 14 files changed, 477 insertions(+), 44 deletions(-) create mode 100644 docs-en/chapter_data_structure/basic_data_types.md create mode 100644 docs-en/chapter_data_structure/character_encoding.assets/ascii_table.png create mode 100644 docs-en/chapter_data_structure/character_encoding.assets/unicode_hello_algo.png create mode 100644 docs-en/chapter_data_structure/character_encoding.assets/utf-8_hello_algo.png create mode 100644 docs-en/chapter_data_structure/character_encoding.md create mode 100644 docs-en/chapter_data_structure/number_encoding.assets/1s_2s_complement.png create mode 100644 docs-en/chapter_data_structure/number_encoding.assets/ieee_754_float.png create mode 100644 docs-en/chapter_data_structure/number_encoding.md create mode 100644 docs-en/chapter_data_structure/summary.md diff --git a/docs-en/chapter_data_structure/basic_data_types.md b/docs-en/chapter_data_structure/basic_data_types.md new file mode 100644 index 000000000..6d2afa029 --- /dev/null +++ b/docs-en/chapter_data_structure/basic_data_types.md @@ -0,0 +1,164 @@ +# Fundamental Data Types + +When we think of data in computers, we imagine various forms like text, images, videos, voice, 3D models, etc. Despite their different organizational forms, they are all composed of various fundamental data types. + +**Fundamental data types are those that the CPU can directly operate on** and are directly used in algorithms, mainly including the following. + +- Integer types: `byte`, `short`, `int`, `long`. +- Floating-point types: `float`, `double`, used to represent decimals. +- Character type: `char`, used to represent letters, punctuation, and even emojis in various languages. +- Boolean type: `bool`, used for "yes" or "no" decisions. + +**Fundamental data types are stored in computers in binary form**. One binary digit is equal to 1 bit. In most modern operating systems, 1 byte consists of 8 bits. + +The range of values for fundamental data types depends on the size of the space they occupy. Below, we take Java as an example. + +- The integer type `byte` occupies 1 byte = 8 bits and can represent \(2^8\) numbers. +- The integer type `int` occupies 4 bytes = 32 bits and can represent \(2^{32}\) numbers. + +The following table lists the space occupied, value range, and default values of various fundamental data types in Java. This table does not need to be memorized, but understood roughly and referred to when needed. + +

Table   Space Occupied and Value Range of Fundamental Data Types

+ +| Type | Symbol | Space Occupied | Minimum Value | Maximum Value | Default Value | +| ------- | -------- | -------------- | -------------------------- | ------------------------- | ---------------- | +| Integer | `byte` | 1 byte | \(-2^7\) (\(-128\)) | \(2^7 - 1\) (\(127\)) | 0 | +| | `short` | 2 bytes | \(-2^{15}\) | \(2^{15} - 1\) | 0 | +| | `int` | 4 bytes | \(-2^{31}\) | \(2^{31} - 1\) | 0 | +| | `long` | 8 bytes | \(-2^{63}\) | \(2^{63} - 1\) | 0 | +| Float | `float` | 4 bytes | \(1.175 \times 10^{-38}\) | \(3.403 \times 10^{38}\) | \(0.0\text{f}\) | +| | `double` | 8 bytes | \(2.225 \times 10^{-308}\) | \(1.798 \times 10^{308}\) | 0.0 | +| Char | `char` | 2 bytes | 0 | \(2^{16} - 1\) | 0 | +| Boolean | `bool` | 1 byte | \(\text{false}\) | \(\text{true}\) | \(\text{false}\) | + +Please note that the above table is specific to Java's fundamental data types. Each programming language has its own data type definitions, and their space occupied, value ranges, and default values may differ. + +- In Python, the integer type `int` can be of any size, limited only by available memory; the floating-point `float` is double precision 64-bit; there is no `char` type, as a single character is actually a string `str` of length 1. +- C and C++ do not specify the size of fundamental data types, which varies with implementation and platform. The above table follows the LP64 [data model](https://en.cppreference.com/w/cpp/language/types#Properties), used for Unix 64-bit operating systems including Linux and macOS. +- The size of `char` in C and C++ is 1 byte, while in most programming languages, it depends on the specific character encoding method, as detailed in the "Character Encoding" chapter. +- Even though representing a boolean only requires 1 bit (0 or 1), it is usually stored in memory as 1 byte. This is because modern computer CPUs typically use 1 byte as the smallest addressable memory unit. + +So, what is the connection between fundamental data types and data structures? We know that data structures are ways to organize and store data in computers. The focus here is on "structure" rather than "data". + +If we want to represent "a row of numbers", we naturally think of using an array. This is because the linear structure of an array can represent the adjacency and order of numbers, but whether the stored content is an integer `int`, a decimal `float`, or a character `char`, is irrelevant to the "data structure". + +In other words, **fundamental data types provide the "content type" of data, while data structures provide the "way of organizing" data**. For example, in the following code, we use the same data structure (array) to store and represent different fundamental data types, including `int`, `float`, `char`, `bool`, etc. + +=== "Python" + + ```python title="" + # Using various fundamental data types to initialize arrays + numbers: list[int] = [0] * 5 + decimals: list[float] = [0.0] * 5 + # Python's characters are actually strings of length 1 + characters: list[str] = ['0'] * 5 + bools: list[bool] = [False] * 5 + # Python's lists can freely store various fundamental data types and object references + data = [0, 0.0, 'a', False, ListNode(0)] + ``` + +=== "C++" + + ```cpp title="" + // Using various fundamental data types to initialize arrays + int numbers[5]; + float decimals[5]; + char characters[5]; + bool bools[5]; + ``` + +=== "Java" + + ```java title="" + // Using various fundamental data types to initialize arrays + int[] numbers = new int[5]; + float[] decimals = new float[5]; + char[] characters = new char[5]; + boolean[] bools = new boolean[5]; + ``` + +=== "C#" + + ```csharp title="" + // Using various fundamental data types to initialize arrays + int[] numbers = new int[5]; + float[] decimals = new float[5]; + char[] characters = new char[5]; + bool[] bools = new bool[5]; + ``` + +=== "Go" + + ```go title="" + // Using various fundamental data types to initialize arrays + var numbers = [5]int{} + var decimals = [5]float64{} + var characters = [5]byte{} + var bools = [5]bool{} + ``` + +=== "Swift" + + ```swift title="" + // Using various fundamental data types to initialize arrays + let numbers = Array(repeating: Int(), count: 5) + let decimals = Array(repeating: Double(), count: 5) + let characters = Array(repeating: Character("a"), count: 5) + let bools = Array(repeating: Bool(), count: 5) + ``` + +=== "JS" + + ```javascript title="" + // JavaScript's arrays can freely store various fundamental data types and objects + const array = [0, 0.0, 'a', false]; + ``` + +=== "TS" + + ```typescript title="" + // Using various fundamental data types to initialize arrays + const numbers: number[] = []; + const characters: string[] = []; + const bools: boolean[] = []; + ``` + +=== "Dart" + + ```dart title="" + // Using various fundamental data types to initialize arrays + List numbers = List.filled(5, 0); + List decimals = List.filled(5, 0.0); + List characters = List.filled(5, 'a'); + List bools = List.filled(5, false); + ``` + +=== "Rust" + + ```rust title="" + // Using various fundamental data types to initialize arrays + let numbers: Vec = vec![0; 5]; + let decimals: Vec = vec![0.0, 5]; + let characters: Vec = vec!['0'; 5]; + let bools: Vec = vec![false; 5]; + ``` + +=== "C" + + ```c title="" + // Using various fundamental data types to initialize arrays + int numbers[10]; + float decimals[10]; + char characters[10]; + bool bools[10]; + ``` + +=== "Zig" + + ```zig title="" + // Using various fundamental data types to initialize arrays + var numbers: [5]i32 = undefined; + var decimals: [5]f32 = undefined; + var characters: [5]u8 = undefined; + var bools: [5]bool = undefined; + ``` diff --git a/docs-en/chapter_data_structure/character_encoding.assets/ascii_table.png b/docs-en/chapter_data_structure/character_encoding.assets/ascii_table.png new file mode 100644 index 0000000000000000000000000000000000000000..d4766d60f18e5b6efb3fff2a777d9e975358ce36 GIT binary patch literal 61596 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ഄ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

0#mRj=&I$dfE8TYa8ZH3iOPt+Ia_ctiA+ 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 DRs2Z9 literal 0 HcmV?d00001 diff --git a/docs-en/chapter_data_structure/character_encoding.md b/docs-en/chapter_data_structure/character_encoding.md new file mode 100644 index 000000000..7487e6165 --- /dev/null +++ b/docs-en/chapter_data_structure/character_encoding.md @@ -0,0 +1,87 @@ +# Character Encoding * + +In computers, all data is stored in binary form, and the character `char` is no exception. To represent characters, we need to establish a "character set" that defines a one-to-one correspondence between each character and binary numbers. With a character set, computers can convert binary numbers to characters by looking up a table. + +## ASCII Character Set + +The "ASCII code" is one of the earliest character sets, officially known as the American Standard Code for Information Interchange. It uses 7 binary digits (the lower 7 bits of a byte) to represent a character, allowing for a maximum of 128 different characters. As shown in the figure below, ASCII includes uppercase and lowercase English letters, numbers 0 ~ 9, some punctuation marks, and some control characters (such as newline and tab). + +![ASCII Code](character_encoding.assets/ascii_table.png) + +However, **ASCII can only represent English characters**. With the globalization of computers, a character set called "EASCII" was developed to represent more languages. It expands on the 7-bit basis of ASCII to 8 bits, enabling the representation of 256 different characters. + +Globally, a series of EASCII character sets for different regions emerged. The first 128 characters of these sets are uniformly ASCII, while the remaining 128 characters are defined differently to cater to various language requirements. + +## GBK Character Set + +Later, it was found that **EASCII still could not meet the character requirements of many languages**. For instance, there are nearly a hundred thousand Chinese characters, with several thousand used in everyday life. In 1980, China's National Standards Bureau released the "GB2312" character set, which included 6763 Chinese characters, essentially meeting the computer processing needs for Chinese. + +However, GB2312 could not handle some rare and traditional characters. The "GBK" character set, an expansion of GB2312, includes a total of 21886 Chinese characters. In the GBK encoding scheme, ASCII characters are represented with one byte, while Chinese characters use two bytes. + +## Unicode Character Set + +With the rapid development of computer technology and a plethora of character sets and encoding standards, numerous problems arose. On one hand, these character sets generally only defined characters for specific languages and could not function properly in multilingual environments. On the other hand, the existence of multiple character set standards for the same language caused garbled text when information was exchanged between computers using different encoding standards. + +Researchers of that era thought: **What if we introduced a comprehensive character set that included all languages and symbols worldwide, wouldn't that solve the problems of cross-language environments and garbled text?** Driven by this idea, the extensive character set, Unicode, was born. + +The Chinese name for "Unicode" is "统一码" (Unified Code), theoretically capable of accommodating over a million characters. It aims to incorporate characters from all over the world into a single set, providing a universal character set for processing and displaying various languages and reducing the issues of garbled text due to different encoding standards. + +Since its release in 1991, Unicode has continually expanded to include new languages and characters. As of September 2022, Unicode contains 149,186 characters, including characters, symbols, and even emojis from various languages. In the vast Unicode character set, commonly used characters occupy 2 bytes, while some rare characters take up 3 or even 4 bytes. + +Unicode is a universal character set that assigns a number (called a "code point") to each character, **but it does not specify how these character code points should be stored in a computer**. One might ask: When Unicode code points of varying lengths appear in a text, how does the system parse the characters? For example, given a 2-byte code, how does the system determine if it represents a single 2-byte character or two 1-byte characters? + +A straightforward solution to this problem is to store all characters as equal-length encodings. As shown in the figure below, each character in "Hello" occupies 1 byte, while each character in "算法" (algorithm) occupies 2 bytes. We could encode all characters in "Hello 算法" as 2 bytes by padding the higher bits with zeros. This way, the system can parse a character every 2 bytes, recovering the content of the phrase. + +![Unicode Encoding Example](character_encoding.assets/unicode_hello_algo.png) + +However, as ASCII has shown us, encoding English only requires 1 byte. Using the above approach would double the space occupied by English text compared to ASCII encoding, which is a waste of memory space. Therefore, a more efficient Unicode encoding method is needed. + +## UTF-8 Encoding + +Currently, UTF-8 has become the most widely used Unicode encoding method internationally. **It is a variable-length encoding**, using 1 to 4 bytes to represent a character, depending on the complexity of the character. ASCII characters need only 1 byte, Latin and Greek letters require 2 bytes, commonly used Chinese characters need 3 bytes, and some other rare characters need 4 bytes. + +The encoding rules for UTF-8 are not complex and can be divided into two cases: + +- For 1-byte characters, set the highest bit to $0$, and the remaining 7 bits to the Unicode code point. Notably, ASCII characters occupy the first 128 code points in the Unicode set. This means that **UTF-8 encoding is backward compatible with ASCII**. This implies that UTF-8 can be used to parse ancient ASCII text. +- For characters of length $n$ bytes (where $n > 1$), set the highest $n$ bits of the first byte to $1$, and the $(n + 1)^{\text{th}}$ bit to $0$; starting from the second byte, set the highest 2 bits of each byte to $10$; the rest of the bits are used to fill the Unicode code point. + +The figure below shows the UTF-8 encoding for "Hello算法". It can be observed that since the highest $n$ bits are set to $1$, the system can determine the length of the character as $n$ by counting the number of highest bits set to $1$. + +But why set the highest 2 bits of the remaining bytes to $10$? Actually, this $10$ serves as a kind of checksum. If the system starts parsing text from an incorrect byte, the $10$ at the beginning of the byte can help the system quickly detect an anomaly. + +The reason for using $10$ as a checksum is that, under UTF-8 encoding rules, it's impossible for the highest two bits of a character to be $10$. This can be proven by contradiction: If the highest two bits of a character are $10$, it indicates that the character's length is $1$, corresponding to ASCII. However, the highest bit of an ASCII character should be $0$, contradicting the assumption. + +![UTF-8 Encoding Example](character_encoding.assets/utf-8_hello_algo.png) + +Apart from UTF-8, other common encoding methods include: + +- **UTF-16 Encoding**: Uses 2 or 4 bytes to represent a character. All ASCII characters and commonly used non-English characters are represented with 2 bytes; a few characters require 4 bytes. For 2-byte characters, the UTF-16 encoding is equal to the Unicode code point. +- **UTF-32 Encoding**: Every character uses 4 bytes. This means UTF-32 occupies more space than UTF-8 and UTF-16, especially for texts with a high proportion of ASCII characters. + +From the perspective of storage space, UTF-8 is highly efficient for representing English characters, requiring only 1 byte; UTF-16 might be more efficient for encoding some non-English characters (like Chinese), as it requires only 2 bytes, while UTF-8 might need 3 bytes. + +From a compatibility standpoint, UTF-8 is the most versatile, with many tools and libraries supporting UTF-8 as a priority. + +## Character Encoding in Programming Languages + +In many classic programming languages, strings during program execution are encoded using fixed-length encodings like UTF-16 or UTF-32. This allows strings to be treated as arrays, offering several advantages: + +- **Random Access**: Strings encoded in UTF-16 can be accessed randomly with ease. For UTF-8, which is a variable-length encoding, locating the $i^{th}$ character requires traversing the string from the start to the $i^{th}$ position, taking $O(n)$ time. +- **Character Counting**: Similar to random access, counting the number of characters in a UTF-16 encoded string is an $O(1)$ operation. However, counting characters in a UTF-8 encoded string requires traversing the entire string. +- **String Operations**: Many string operations like splitting, concatenating, inserting, and deleting are easier on UTF-16 encoded strings. These operations generally require additional computation on UTF-8 encoded strings to ensure the validity of the UTF-8 encoding. + +The design of character encoding schemes in programming languages is an interesting topic involving various factors: + +- Java’s `String` type uses UTF-16 encoding, with each character occupying 2 bytes. This was based on the initial belief that 16 bits were sufficient to represent all possible characters, a judgment later proven incorrect. As the Unicode standard expanded beyond 16 bits, characters in Java may now be represented by a pair of 16-bit values, known as “surrogate pairs.” +- JavaScript and TypeScript use UTF-16 encoding for similar reasons as Java. When JavaScript was first introduced by Netscape in 1995, Unicode was still in its early stages, and 16-bit encoding was sufficient to represent all Unicode characters. +- C# uses UTF-16 encoding, largely because the .NET platform, designed by Microsoft, and many Microsoft technologies, including the Windows operating system, extensively use UTF-16 encoding. + +Due to the underestimation of character counts, these languages had to resort to using "surrogate pairs" to represent Unicode characters exceeding 16 bits. This approach has its drawbacks: strings containing surrogate pairs may have characters occupying 2 or 4 bytes, losing the advantage of fixed-length encoding, and handling surrogate pairs adds to the complexity and debugging difficulty of programming. + +Owing to these reasons, some programming languages have adopted different encoding schemes: + +- Python’s `str` type uses Unicode encoding with a flexible representation where the storage length of characters depends on the largest Unicode code point in the string. If all characters are ASCII, each character occupies 1 byte; if characters exceed ASCII but are within the Basic Multilingual Plane (BMP), each occupies 2 bytes; if characters exceed the BMP, each occupies 4 bytes. +- Go’s `string` type internally uses UTF-8 encoding. Go also provides the `rune` type for representing individual Unicode code points. +- Rust’s `str` and `String` types use UTF-8 encoding internally. Rust also offers the `char` type for individual Unicode code points. + +It’s important to note that the above discussion pertains to how strings are stored in programming languages, **which is a different issue from how strings are stored in files or transmitted over networks**. For file storage or network transmission, strings are usually encoded in UTF-8 format for optimal compatibility and space efficiency. diff --git a/docs-en/chapter_data_structure/classification_of_data_structure.md b/docs-en/chapter_data_structure/classification_of_data_structure.md index 4ec268b1d..aa2004d1f 100644 --- a/docs-en/chapter_data_structure/classification_of_data_structure.md +++ b/docs-en/chapter_data_structure/classification_of_data_structure.md @@ -1,49 +1,48 @@ -# Classification Of Data Structures +# Classification of Data Structures -Common data structures include arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs. They can be divided into two categories: logical structure and physical structure. +Common data structures include arrays, linked lists, stacks, queues, hash tables, trees, heaps, and graphs. They can be classified into two dimensions: "Logical Structure" and "Physical Structure". -## Logical Structures: Linear And Non-linear +## Logical Structure: Linear and Non-Linear -**Logical structures reveal logical relationships between data elements**. In arrays and linked lists, data are arranged in sequential order, reflecting the linear relationship between data; while in trees, data are arranged hierarchically from the top down, showing the derived relationship between ancestors and descendants; and graphs are composed of nodes and edges, reflecting the complex network relationship. +**The logical structure reveals the logical relationships between data elements**. In arrays and linked lists, data is arranged in a certain order, reflecting a linear relationship between them. In trees, data is arranged from top to bottom in layers, showing a "ancestor-descendant" hierarchical relationship. Graphs, consisting of nodes and edges, represent complex network relationships. -As shown in the figure below, logical structures can further be divided into "linear data structure" and "non-linear data structure". Linear data structures are more intuitive, meaning that the data are arranged linearly in terms of logical relationships; non-linear data structures, on the other hand, are arranged non-linearly. +As shown in the figure below, logical structures can be divided into two major categories: "Linear" and "Non-linear". Linear structures are more intuitive, indicating data is arranged linearly in logical relationships; non-linear structures, conversely, are arranged non-linearly. -- **Linear data structures**: arrays, linked lists, stacks, queues, hash tables. -- **Nonlinear data structures**: trees, heaps, graphs, hash tables. +- **Linear Data Structures**: Arrays, Linked Lists, Stacks, Queues, Hash Tables. +- **Non-Linear Data Structures**: Trees, Heaps, Graphs, Hash Tables. -![Linear and nonlinear data structures](classification_of_data_structure.assets/classification_logic_structure.png) +![Linear and Non-Linear Data Structures](classification_of_data_structure.assets/classification_logic_structure.png) -Non-linear data structures can be further divided into tree and graph structures. +Non-linear data structures can be further divided into tree structures and network structures. -- **Linear structures**: arrays, linked lists, queues, stacks, hash tables, with one-to-one sequential relationship between elements. -- **Tree structure**: tree, heap, hash table, with one-to-many relationship between elements. -- **Graph**: graph with many-to-many relationship between elements. +- **Tree Structures**: Trees, Heaps, Hash Tables, where elements have one-to-many relationships. +- **Network Structures**: Graphs, where elements have many-to-many relationships. -## Physical Structure: Continuous vs. Dispersed +## Physical Structure: Contiguous and Dispersed -**When an algorithm is running, the data being processed is stored in memory**. The figure below shows a computer memory module where each black square represents a memory space. We can think of the memory as a giant Excel sheet in which each cell can store data of a certain size. +**When an algorithm program runs, the data being processed is mainly stored in memory**. The following figure shows a computer memory stick, each black block containing a memory space. We can imagine memory as a huge Excel spreadsheet, where each cell can store a certain amount of data. -**The system accesses the data at the target location by means of a memory address**. As shown in the figure below, the computer assigns a unique identifier to each cell in the table according to specific rules, ensuring that each memory space has a unique memory address. With these addresses, the program can access the data in memory. +**The system accesses data at the target location through memory addresses**. As shown in the figure below, the computer allocates numbers to each cell in the table according to specific rules, ensuring each memory space has a unique memory address. With these addresses, programs can access data in memory. -![memory_strip, memory_space, memory_address](classification_of_data_structure.assets/computer_memory_location.png) +![Memory Stick, Memory Spaces, Memory Addresses](classification_of_data_structure.assets/computer_memory_location.png) !!! tip - It is worth noting that comparing memory to the Excel sheet is a simplified analogy. The actual memory working mechanism is more complicated, involving the concepts of address, space, memory management, cache mechanism, virtual and physical memory. + It's worth noting that comparing memory to an Excel spreadsheet is a simplified analogy. The actual working mechanism of memory is more complex, involving concepts like address space, memory management, cache mechanisms, virtual memory, and physical memory. -Memory is a shared resource for all programs, and when a block of memory is occupied by one program, it cannot be used by other programs at the same time. **Therefore, considering memory resources is crucial in designing data structures and algorithms**. For example, the algorithm's peak memory usage should not exceed the remaining free memory of the system; if there is a lack of contiguous memory blocks, then the data structure chosen must be able to be stored in non-contiguous memory blocks. +Memory is a shared resource for all programs. When a block of memory is occupied by one program, it cannot be used by others simultaneously. **Therefore, memory resources are an important consideration in the design of data structures and algorithms**. For example, the peak memory usage of an algorithm should not exceed the system's remaining free memory. If there is a lack of contiguous large memory spaces, the chosen data structure must be able to store data in dispersed memory spaces. -As shown in the figure below, **Physical structure reflects the way data is stored in computer memory and it can be divided into consecutive space storage (arrays) and distributed space storage (linked lists)**. The physical structure determines how data is accessed, updated, added, deleted, etc. Logical and physical structure complement each other in terms of time efficiency and space efficiency. +As shown in the figure below, **the physical structure reflects how data is stored in computer memory**, which can be divided into contiguous space storage (arrays) and dispersed space storage (linked lists). The physical structure determines from the bottom level how data is accessed, updated, added, or deleted. Both types of physical structures exhibit complementary characteristics in terms of time efficiency and space efficiency. -![continuous vs. decentralized spatial storage](classification_of_data_structure.assets/classification_phisical_structure.png) +![Contiguous Space Storage and Dispersed Space Storage](classification_of_data_structure.assets/classification_phisical_structure.png) -**It is worth stating that all data structures are implemented based on arrays, linked lists, or a combination of the two**. For example, stacks and queues can be implemented using both arrays and linked lists; and implementations of hash tables may contain both arrays and linked lists. +It's important to note that **all data structures are implemented based on arrays, linked lists, or a combination of both**. For example, stacks and queues can be implemented using either arrays or linked lists; while hash tables may include both arrays and linked lists. -- **Array-based structures**: stacks, queues, hash tables, trees, heaps, graphs, matrices, tensors (arrays of dimension $\geq 3$), and so on. -- **Linked list-based structures**: stacks, queues, hash tables, trees, heaps, graphs, etc. +- **Array-based Implementations**: Stacks, Queues, Hash Tables, Trees, Heaps, Graphs, Matrices, Tensors (arrays with dimensions $\geq 3$). +- **Linked List-based Implementations**: Stacks, Queues, Hash Tables, Trees, Heaps, Graphs, etc. -Data structures based on arrays are also known as "static data structures", which means that such structures' length remains constant after initialization. In contrast, data structures based on linked lists are called "dynamic data structures", meaning that their length can be adjusted during program execution after initialization. +Data structures implemented based on arrays are also called “Static Data Structures,” meaning their length cannot be changed after initialization. Conversely, those based on linked lists are called “Dynamic Data Structures,” which can still adjust their size during program execution. !!! tip - If you find it difficult to understand the physical structure, it is recommended that you read the next chapter, "Arrays and Linked Lists," before reviewing this section. + If you find it difficult to understand the physical structure, it's recommended to read the next chapter first and then revisit this section. diff --git a/docs-en/chapter_data_structure/index.md b/docs-en/chapter_data_structure/index.md index 147eee85c..a5d3d8c17 100644 --- a/docs-en/chapter_data_structure/index.md +++ b/docs-en/chapter_data_structure/index.md @@ -1,13 +1,13 @@ -# Data Structure +# Data Structures

-![data structure](../assets/covers/chapter_data_structure.jpg) +![Data Structures](../assets/covers/chapter_data_structure.jpg)
!!! abstract - Data structures resemble a stable and diverse framework. - - They serve as a blueprint for organizing data orderly, enabling algorithms to come to life upon this foundation. + Data structures serve as a robust and diverse framework. + + They offer a blueprint for the orderly organization of data, upon which algorithms come to life. diff --git a/docs-en/chapter_data_structure/number_encoding.assets/1s_2s_complement.png b/docs-en/chapter_data_structure/number_encoding.assets/1s_2s_complement.png new file mode 100644 index 0000000000000000000000000000000000000000..587b8cd2afd889240dd2ec45a04496979ac6ab1e GIT binary patch literal 21585 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
p`(B~xfN*g- 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 literal 0 HcmV?d00001 diff --git a/docs-en/chapter_data_structure/number_encoding.md b/docs-en/chapter_data_structure/number_encoding.md new file mode 100644 index 000000000..b8d4d35c4 --- /dev/null +++ b/docs-en/chapter_data_structure/number_encoding.md @@ -0,0 +1,150 @@ +# Number Encoding * + +!!! note + + In this book, chapters marked with an * symbol are optional reads. If you are short on time or find them challenging, you may skip these initially and return to them after completing the essential chapters. + +## Integer Encoding + +In the table from the previous section, we noticed that all integer types can represent one more negative number than positive numbers, such as the `byte` range of $[-128, 127]$. This phenomenon, somewhat counterintuitive, is rooted in the concepts of sign-magnitude, one's complement, and two's complement encoding. + +Firstly, it's important to note that **numbers are stored in computers using the two's complement form**. Before analyzing why this is the case, let's define these three encoding methods: + +- **Sign-magnitude**: The highest bit of a binary representation of a number is considered the sign bit, where $0$ represents a positive number and $1$ represents a negative number. The remaining bits represent the value of the number. +- **One's complement**: The one's complement of a positive number is the same as its sign-magnitude. For negative numbers, it's obtained by inverting all bits except the sign bit. +- **Two's complement**: The two's complement of a positive number is the same as its sign-magnitude. For negative numbers, it's obtained by adding $1$ to their one's complement. + +The following diagram illustrates the conversions among sign-magnitude, one's complement, and two's complement: + +![Conversions between Sign-Magnitude, One's Complement, and Two's Complement](number_encoding.assets/1s_2s_complement.png) + +Although sign-magnitude is the most intuitive, it has limitations. For one, **negative numbers in sign-magnitude cannot be directly used in calculations**. For example, in sign-magnitude, calculating $1 + (-2)$ results in $-3$, which is incorrect. + +$$ +\begin{aligned} +& 1 + (-2) \newline +& \rightarrow 0000 \; 0001 + 1000 \; 0010 \newline +& = 1000 \; 0011 \newline +& \rightarrow -3 +\end{aligned} +$$ + +To address this, computers introduced the **one's complement**. If we convert to one's complement and calculate $1 + (-2)$, then convert the result back to sign-magnitude, we get the correct result of $-1$. + +$$ +\begin{aligned} +& 1 + (-2) \newline +& \rightarrow 0000 \; 0001 \; \text{(Sign-magnitude)} + 1000 \; 0010 \; \text{(Sign-magnitude)} \newline +& = 0000 \; 0001 \; \text{(One's complement)} + 1111 \; 1101 \; \text{(One's complement)} \newline +& = 1111 \; 1110 \; \text{(One's complement)} \newline +& = 1000 \; 0001 \; \text{(Sign-magnitude)} \newline +& \rightarrow -1 +\end{aligned} +$$ + +Additionally, **there are two representations of zero in sign-magnitude**: $+0$ and $-0$. This means two different binary encodings for zero, which could lead to ambiguity. For example, in conditional checks, not differentiating between positive and negative zero might result in incorrect outcomes. Addressing this ambiguity would require additional checks, potentially reducing computational efficiency. + +$$ +\begin{aligned} ++0 & \rightarrow 0000 \; 0000 \newline +-0 & \rightarrow 1000 \; 0000 +\end{aligned} +$$ + +Like sign-magnitude, one's complement also suffers from the positive and negative zero ambiguity. Therefore, computers further introduced the **two's complement**. Let's observe the conversion process for negative zero in sign-magnitude, one's complement, and two's complement: + +$$ +\begin{aligned} +-0 \rightarrow \; & 1000 \; 0000 \; \text{(Sign-magnitude)} \newline += \; & 1111 \; 1111 \; \text{(One's complement)} \newline += 1 \; & 0000 \; 0000 \; \text{(Two's complement)} \newline +\end{aligned} +$$ + +Adding $1$ to the one's complement of negative zero produces a carry, but with `byte` length being only 8 bits, the carried-over $1$ to the 9th bit is discarded. Therefore, **the two's complement of negative zero is $0000 \; 0000$**, the same as positive zero, thus resolving the ambiguity. + +One last puzzle is the $[-128, 127]$ range for `byte`, with an additional negative number, $-128$. We observe that for the interval $[-127, +127]$, all integers have corresponding sign-magnitude, one's complement, and two's complement, and these can be converted between each other. + +However, **the two's complement $1000 \; 0000$ is an exception without a corresponding sign-magnitude**. According to the conversion method, its sign-magnitude would be $0000 \; 0000$, which is a contradiction since this represents zero, and its two's complement should be itself. Computers designate this special two's complement $1000 \; 0000$ as representing $-128$. In fact, the calculation of $(-1) + (-127)$ in two's complement results in $-128$. + +$$ +\begin{aligned} +& (-127) + (-1) \newline +& \rightarrow 1111 \; 1111 \; \text{(Sign-magnitude)} + 1000 \; 0001 \; \text{(Sign-magnitude)} \newline +& = 1000 \; 0000 \; \text{(One's complement)} + 1111 \; 1110 \; \text{(One's complement)} \newline +& = 1000 \; 0001 \; \text{(Two's complement)} + 1111 \; 1111 \; \text{(Two's complement)} \newline +& = 1000 \; 0000 \; \text{(Two's complement)} \newline +& \rightarrow -128 +\end{aligned} +$$ + +As you might have noticed, all these calculations are additions, hinting at an important fact: **computers' internal hardware circuits are primarily designed around addition operations**. This is because addition is simpler to implement in hardware compared to other operations like multiplication, division, and subtraction, allowing for easier parallelization and faster computation. + +It's important to note that this doesn't mean computers can only perform addition. **By combining addition with basic logical operations, computers can execute a variety of other mathematical operations**. For example, the subtraction $a - b$ can be translated into $a + (-b)$; multiplication and division can be translated into multiple additions or subtractions. + +We can now summarize the reason for using two's complement in computers: with two's complement representation, computers can use the same circuits and operations to handle both positive and negative number addition, eliminating the need for special hardware circuits for subtraction and avoiding the ambiguity of positive and negative zero. This greatly simplifies hardware design and enhances computational efficiency. + +The design of two's complement is quite ingenious, and due to space constraints, we'll stop here. Interested readers are encouraged to explore further. + +## Floating-Point Number Encoding + +You might have noticed something intriguing: despite having the same length of 4 bytes, why does a `float` have a much larger range of values compared to an `int`? This seems counterintuitive, as one would expect the range to shrink for `float` since it needs to represent fractions. + +In fact, **this is due to the different representation method used by floating-point numbers (`float`)**. Let's consider a 32-bit binary number as: + +$$ +b_{31} b_{30} b_{29} \ldots b_2 b_1 b_0 +$$ + +According to the IEEE 754 standard, a 32-bit `float` consists of the following three parts: + +- Sign bit $\mathrm{S}$: Occupies 1 bit, corresponding to $b_{31}$. +- Exponent bit $\mathrm{E}$: Occupies 8 bits, corresponding to $b_{30} b_{29} \ldots b_{23}$. +- Fraction bit $\mathrm{N}$: Occupies 23 bits, corresponding to $b_{22} b_{21} \ldots b_0$. + +The value of a binary `float` number is calculated as: + +$$ +\text{val} = (-1)^{b_{31}} \times 2^{\left(b_{30} b_{29} \ldots b_{23}\right)_2 - 127} \times \left(1 . b_{22} b_{21} \ldots b_0\right)_2 +$$ + +Converted to a decimal formula, this becomes: + +$$ +\text{val} = (-1)^{\mathrm{S}} \times 2^{\mathrm{E} - 127} \times (1 + \mathrm{N}) +$$ + +The range of each component is: + +$$ +\begin{aligned} +\mathrm{S} \in & \{ 0, 1\}, \quad \mathrm{E} \in \{ 1, 2, \dots, 254 \} \newline +(1 + \mathrm{N}) = & (1 + \sum_{i=1}^{23} b_{23-i} \times 2^{-i}) \subset [1, 2 - 2^{-23}] +\end{aligned} +$$ + +![Example Calculation of a float in IEEE 754 Standard](number_encoding.assets/ieee_754_float.png) + +Observing the diagram, given an example data $\mathrm{S} = 0$, $\mathrm{E} = 124$, $\mathrm{N} = 2^{-2} + 2^{-3} = 0.375$, we have: + +$$ +\text{val} = (-1)^0 \times 2^{124 - 127} \times (1 + 0.375) = 0.171875 +$$ + +Now we can answer the initial question: **The representation of `float` includes an exponent bit, leading to a much larger range than `int`**. Based on the above calculation, the maximum positive number representable by `float` is approximately $2^{254 - 127} \times (2 - 2^{-23}) \approx 3.4 \times 10^{38}$, and the minimum negative number is obtained by switching the sign bit. + +**However, the trade-off for `float`'s expanded range is a sacrifice in precision**. The integer type `int` uses all 32 bits to represent the number, with values evenly distributed; but due to the exponent bit, the larger the value of a `float`, the greater the difference between adjacent numbers. + +As shown in the table below, exponent bits $E = 0$ and $E = 255$ have special meanings, **used to represent zero, infinity, $\mathrm{NaN}$, etc.** + +

Table   Meaning of Exponent Bits

+ +| Exponent Bit E | Fraction Bit $\mathrm{N} = 0$ | Fraction Bit $\mathrm{N} \ne 0$ | Calculation Formula | +| ------------------ | ----------------------------- | ------------------------------- | ---------------------------------------------------------------------- | +| $0$ | $\pm 0$ | Subnormal Numbers | $(-1)^{\mathrm{S}} \times 2^{-126} \times (0.\mathrm{N})$ | +| $1, 2, \dots, 254$ | Normal Numbers | Normal Numbers | $(-1)^{\mathrm{S}} \times 2^{(\mathrm{E} -127)} \times (1.\mathrm{N})$ | +| $255$ | $\pm \infty$ | $\mathrm{NaN}$ | | + +It's worth noting that subnormal numbers significantly improve the precision of floating-point numbers. The smallest positive normal number is $2^{-126}$, and the smallest positive subnormal number is $2^{-126} \times 2^{-23}$. + +Double-precision `double` also uses a similar representation method to `float`, which is not elaborated here for brevity. diff --git a/docs-en/chapter_data_structure/summary.md b/docs-en/chapter_data_structure/summary.md new file mode 100644 index 000000000..8fc838610 --- /dev/null +++ b/docs-en/chapter_data_structure/summary.md @@ -0,0 +1,33 @@ +# Summary + +### Key Review + +- Data structures can be categorized from two perspectives: logical structure and physical structure. Logical structure describes the logical relationships between data elements, while physical structure describes how data is stored in computer memory. +- Common logical structures include linear, tree-like, and network structures. We generally classify data structures into linear (arrays, linked lists, stacks, queues) and non-linear (trees, graphs, heaps) based on their logical structure. The implementation of hash tables may involve both linear and non-linear data structures. +- When a program runs, data is stored in computer memory. Each memory space has a corresponding memory address, and the program accesses data through these addresses. +- Physical structures are primarily divided into contiguous space storage (arrays) and dispersed space storage (linked lists). All data structures are implemented using arrays, linked lists, or a combination of both. +- Basic data types in computers include integers (`byte`, `short`, `int`, `long`), floating-point numbers (`float`, `double`), characters (`char`), and booleans (`boolean`). Their range depends on the size of the space occupied and the representation method. +- Original code, complement code, and two's complement code are three methods of encoding numbers in computers, and they can be converted into each other. The highest bit of the original code of an integer is the sign bit, and the remaining bits represent the value of the number. +- Integers are stored in computers in the form of two's complement. In this representation, the computer can treat the addition of positive and negative numbers uniformly, without the need for special hardware circuits for subtraction, and there is no ambiguity of positive and negative zero. +- The encoding of floating-point numbers consists of 1 sign bit, 8 exponent bits, and 23 fraction bits. Due to the presence of the exponent bit, the range of floating-point numbers is much greater than that of integers, but at the cost of sacrificing precision. +- ASCII is the earliest English character set, 1 byte in length, and includes 127 characters. The GBK character set is a commonly used Chinese character set, including more than 20,000 Chinese characters. Unicode strives to provide a complete character set standard, including characters from various languages worldwide, thus solving the problem of garbled characters caused by inconsistent character encoding methods. +- UTF-8 is the most popular Unicode encoding method, with excellent universality. It is a variable-length encoding method with good scalability and effectively improves the efficiency of space usage. UTF-16 and UTF-32 are fixed-length encoding methods. When encoding Chinese characters, UTF-16 occupies less space than UTF-8. Programming languages like Java and C# use UTF-16 encoding by default. + +### Q & A + +!!! question "Why does a hash table contain both linear and non-linear data structures?" + + The underlying structure of a hash table is an array. To resolve hash collisions, we may use "chaining": each bucket in the array points to a linked list, which, when exceeding a certain threshold, might be transformed into a tree (usually a red-black tree). + From a storage perspective, the foundation of a hash table is an array, where each bucket slot might contain a value, a linked list, or a tree. Therefore, hash tables may contain both linear data structures (arrays, linked lists) and non-linear data structures (trees). + +!!! question "Is the length of the `char` type 1 byte?" + + The length of the `char` type is determined by the encoding method used by the programming language. For example, Java, JavaScript, TypeScript, and C# all use UTF-16 encoding (to save Unicode code points), so the length of the char type is 2 bytes. + +!!! question "Is there ambiguity in calling data structures based on arrays 'static data structures'? Because operations like push and pop on stacks are 'dynamic.'" + + While stacks indeed allow for dynamic data operations, the data structure itself remains "static" (with unchangeable length). Even though data structures based on arrays can dynamically add or remove elements, their capacity is fixed. If the data volume exceeds the pre-allocated size, a new, larger array needs to be created, and the contents of the old array copied into it. + +!!! question "When building stacks (queues) without specifying their size, why are they considered 'static data structures'?" + + In high-level programming languages, we don't need to manually specify the initial capacity of stacks (queues); this task is automatically handled internally by the class. For example, the initial capacity of Java's ArrayList is usually 10. Furthermore, the expansion operation is also implemented automatically. See the subsequent "List" chapter for details. diff --git a/docs-en/chapter_preface/suggestions.md b/docs-en/chapter_preface/suggestions.md index d19ca9bc2..bfba2aa85 100644 --- a/docs-en/chapter_preface/suggestions.md +++ b/docs-en/chapter_preface/suggestions.md @@ -1,4 +1,4 @@ -# How To Read +# How to Read !!! tip diff --git a/docs/chapter_data_structure/character_encoding.md b/docs/chapter_data_structure/character_encoding.md index 47f78339f..2bbdbbd78 100644 --- a/docs/chapter_data_structure/character_encoding.md +++ b/docs/chapter_data_structure/character_encoding.md @@ -82,6 +82,6 @@ UTF-8 的编码规则并不复杂,分为以下两种情况。 - Python 中的 `str` 使用 Unicode 编码,并采用一种灵活的字符串表示,存储的字符长度取决于字符串中最大的 Unicode 码点。若字符串中全部是 ASCII 字符,则每个字符占用 1 字节;如果有字符超出了 ASCII 范围,但全部在基本多语言平面(BMP)内,则每个字符占用 2 字节;如果有超出 BMP 的字符,则每个字符占用 4 字节。 - Go 语言的 `string` 类型在内部使用 UTF-8 编码。Go 语言还提供了 `rune` 类型,它用于表示单个 Unicode 码点。 -- Rust 语言的 str 和 String 类型在内部使用 UTF-8 编码。Rust 也提供了 `char` 类型,用于表示单个 Unicode 码点。 +- Rust 语言的 `str` 和 `String` 类型在内部使用 UTF-8 编码。Rust 也提供了 `char` 类型,用于表示单个 Unicode 码点。 需要注意的是,以上讨论的都是字符串在编程语言中的存储方式,**这和字符串如何在文件中存储或在网络中传输是不同的问题**。在文件存储或网络传输中,我们通常会将字符串编码为 UTF-8 格式,以达到最优的兼容性和空间效率。 diff --git a/mkdocs-en.yml b/mkdocs-en.yml index a2b42298c..a483e4f18 100644 --- a/mkdocs-en.yml +++ b/mkdocs-en.yml @@ -27,31 +27,31 @@ nav: - Chapter 0. Preface: # [icon: material/book-open-outline] - chapter_preface/index.md - - 0.1 The Book: chapter_preface/about_the_book.md + - 0.1 About This Book: chapter_preface/about_the_book.md - 0.2 How to Read: chapter_preface/suggestions.md - 0.3 Summary: chapter_preface/summary.md - Chapter 1. Introduction to Algorithms: # [icon: material/calculator-variant-outline] - chapter_introduction/index.md - - 1.1 Algorithms Are Everywhere: chapter_introduction/algorithms_are_everywhere.md - - 1.2 What Is Algorithms: chapter_introduction/what_is_dsa.md + - 1.1 Algorithms are Everywhere: chapter_introduction/algorithms_are_everywhere.md + - 1.2 What is an Algorithm: chapter_introduction/what_is_dsa.md - 1.3 Summary: chapter_introduction/summary.md - Chapter 2. Complexity Analysis: # [icon: material/timer-sand] - chapter_computational_complexity/index.md - - 2.1 Evaluating Algorithm Efficiency: chapter_computational_complexity/performance_evaluation.md + - 2.1 Algorithm Efficiency Assessment: chapter_computational_complexity/performance_evaluation.md - 2.2 Iteration and Recursion: chapter_computational_complexity/iteration_and_recursion.md - 2.3 Time Complexity: chapter_computational_complexity/time_complexity.md - 2.4 Space Complexity: chapter_computational_complexity/space_complexity.md - 2.5 Summary: chapter_computational_complexity/summary.md - # - Chapter 3. Data Structure: - # # [icon: material/shape-outline] - # - chapter_data_structure/index.md - # - 3.1 Classification of Data Structure: chapter_data_structure/classification_of_data_structure.md - # - 3.2 Basic Data Types: chapter_data_structure/basic_data_types.md - # - 3.3 Number Encoding *: chapter_data_structure/number_encoding.md - # - 3.4 Character Encoding *: chapter_data_structure/character_encoding.md - # - 3.5 Summary: chapter_data_structure/summary.md + - Chapter 3. Data Structures: + # [icon: material/shape-outline] + - chapter_data_structure/index.md + - 3.1 Classification of Data Structures: chapter_data_structure/classification_of_data_structure.md + - 3.2 Fundamental Data Types: chapter_data_structure/basic_data_types.md + - 3.3 Number Encoding *: chapter_data_structure/number_encoding.md + - 3.4 Character Encoding *: chapter_data_structure/character_encoding.md + - 3.5 Summary: chapter_data_structure/summary.md # - Chapter 4. Array and Linked List: # # [icon: material/view-list-outline] # - chapter_array_and_linkedlist/index.md