diff --git a/.gitignore b/.gitignore index 190a18d75..04ea34de3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # macOS .DS_Store -# Editor +# editors .vscode/ **/.idea @@ -12,6 +12,3 @@ /build /site /utils - -# test script -test.sh diff --git a/docs/chapter_array_and_linkedlist/summary.md b/docs/chapter_array_and_linkedlist/summary.md index bd314566b..191e8a00f 100644 --- a/docs/chapter_array_and_linkedlist/summary.md +++ b/docs/chapter_array_and_linkedlist/summary.md @@ -71,6 +71,16 @@ 另一方面,必要使用链表的情况主要是二叉树和图。栈和队列往往会使用编程语言提供的 `stack` 和 `queue` ,而非链表。 -**Q**:初始化列表 `res = [0] * self.size()` 操作,会导致 `res` 的每个元素引用相同的地址吗? +**Q**:操作 `res = [[0]] * n` 生成了一个二维列表,其中每一个 `[0]` 都是独立的吗? -不会。但二维数组会有这个问题,例如初始化二维列表 `res = [[0]] * self.size()` ,则多次引用了同一个列表 `[0]` 。 +不是独立的。此二维列表中,所有的 `[0]` 实际上是同一个对象的引用。如果我们修改其中一个元素,会发现所有的对应元素都会随之改变。 + +如果希望二维列表中的每个 `[0]` 都是独立的,可以使用 `res = [[0] for _ in range(n)]` 来实现。这种方式的原理是初始化了 $n$ 个独立的 `[0]` 列表对象。 + +**Q**:操作 `res = [0] * n` 生成了一个列表,其中每一个整数 0 都是独立的吗? + +在该列表中,所有整数 0 都是同一个对象的引用。这是因为 Python 对小整数(通常是 -5 到 256)采用了缓存池机制,以便最大化对象复用,从而提升性能。 + +虽然它们指向同一个对象,但我们仍然可以独立修改列表中的每个元素,这是因为 Python 的整数是“不可变对象”。当我们修改某个元素时,实际上是切换为另一个对象的引用,而不是改变原有对象本身。 + +然而,当列表元素是“可变对象”时(例如列表、字典或类实例等),修改某个元素会直接改变该对象本身,所有引用该对象的元素都会产生相同变化。 diff --git a/docs/chapter_introduction/summary.md b/docs/chapter_introduction/summary.md index 6eb7301a2..ba538bcaa 100644 --- a/docs/chapter_introduction/summary.md +++ b/docs/chapter_introduction/summary.md @@ -5,7 +5,7 @@ - 整理扑克的过程与插入排序算法非常类似。插入排序算法适合排序小型数据集。 - 货币找零的步骤本质上是贪心算法,每一步都采取当前看来最好的选择。 - 算法是在有限时间内解决特定问题的一组指令或操作步骤,而数据结构是计算机中组织和存储数据的方式。 -- 数据结构与算法紧密相连。数据结构是算法的基石,而算法是数据结构发挥作用的舞台。 +- 数据结构与算法紧密相连。数据结构是算法的基石,而算法为数据结构注入生命力。 - 我们可以将数据结构与算法类比为拼装积木,积木代表数据,积木的形状和连接方式等代表数据结构,拼装积木的步骤则对应算法。 ### Q & A diff --git a/docs/chapter_introduction/what_is_dsa.md b/docs/chapter_introduction/what_is_dsa.md index 9bc5e0d5a..05485f85f 100644 --- a/docs/chapter_introduction/what_is_dsa.md +++ b/docs/chapter_introduction/what_is_dsa.md @@ -26,7 +26,7 @@ 如下图所示,数据结构与算法高度相关、紧密结合,具体表现在以下三个方面。 - 数据结构是算法的基石。数据结构为算法提供了结构化存储的数据,以及操作数据的方法。 -- 算法是数据结构发挥作用的舞台。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 +- 算法为数据结构注入生命力。数据结构本身仅存储数据信息,结合算法才能解决特定问题。 - 算法通常可以基于不同的数据结构实现,但执行效率可能相差很大,选择合适的数据结构是关键。 ![数据结构与算法的关系](what_is_dsa.assets/relationship_between_data_structure_and_algorithm.png) diff --git a/en/CONTRIBUTING.md b/en/CONTRIBUTING.md index d131c8714..5e226da57 100644 --- a/en/CONTRIBUTING.md +++ b/en/CONTRIBUTING.md @@ -32,14 +32,14 @@ That is, our contributors are computer scientists, engineers, and students from > [!important] > Before diving in, ensure you're comfortable with the GitHub pull request workflow and have read the "Translation standards" and "Pseudo-code for translation" below. -1. **Self-assignment**: Visit [GitHub projects](https://github.com/users/krahets/projects/2/views/4) to select an unclaimed task and mark it as `In Progress`. -2. **Translation**: We encourage preserving the original meaning while ensuring the translation is natural and fluent. -3. **Peer review**: Please carefully check your changes before submitting a Pull Request (PR). After approval by two reviewers, it will be merged into the project. +1. **Task assignment**: Self-assign a task in the Notion workspace. +2. **Translation**: Optimize the translation on your local PC, referring to the “Translation Pseudo-Code” section below for more details. +3. **Peer review**: Carefully review your changes before submitting a Pull Request (PR). The PR will be merged into the main branch after approval from two reviewers. ## Translation standards > [!tip] -> The "Accuracy" and "Authenticity" are primarily handled by native Chinese speakers and native English speakers, respectively. +> **The "Accuracy" and "Authenticity" are primarily handled by native Chinese speakers and native English speakers, respectively.** > > In some instances, "Accuracy (consistency)" and "Authenticity" represent a trade-off, where optimizing one aspect could significantly affect the other. In such cases, please leave a comment in the pull request for discussion. diff --git a/en/docs/index.html b/en/docs/index.html index 01a95b5a5..1ccff9cc9 100644 --- a/en/docs/index.html +++ b/en/docs/index.html @@ -414,7 +414,7 @@
This book has been optimized by the efforts of over 180 contributors. We sincerely thank them for their invaluable time and contributions!
+This book has been refined by the efforts of over 180 contributors. We sincerely thank them for their invaluable time and contributions!
diff --git a/zh-hant/codes/cpp/chapter_tree/array_binary_tree.cpp b/zh-hant/codes/cpp/chapter_tree/array_binary_tree.cpp index d0d77b547..0c8f3287f 100644 --- a/zh-hant/codes/cpp/chapter_tree/array_binary_tree.cpp +++ b/zh-hant/codes/cpp/chapter_tree/array_binary_tree.cpp @@ -115,9 +115,9 @@ int main() { int i = 1; int l = abt.left(i), r = abt.right(i), p = abt.parent(i); cout << "\n當前節點的索引為 " << i << ",值為 " << abt.val(i) << "\n"; - cout << "其左子節點的索引為 " << l << ",值為 " << (l != INT_MAX ? to_string(abt.val(l)) : "nullptr") << "\n"; - cout << "其右子節點的索引為 " << r << ",值為 " << (r != INT_MAX ? to_string(abt.val(r)) : "nullptr") << "\n"; - cout << "其父節點的索引為 " << p << ",值為 " << (p != INT_MAX ? to_string(abt.val(p)) : "nullptr") << "\n"; + cout << "其左子節點的索引為 " << l << ",值為 " << (abt.val(l) != INT_MAX ? to_string(abt.val(l)) : "nullptr") << "\n"; + cout << "其右子節點的索引為 " << r << ",值為 " << (abt.val(r) != INT_MAX ? to_string(abt.val(r)) : "nullptr") << "\n"; + cout << "其父節點的索引為 " << p << ",值為 " << (abt.val(p) != INT_MAX ? to_string(abt.val(p)) : "nullptr") << "\n"; // 走訪樹 vector