mirror of
https://github.com/krahets/hello-algo.git
synced 2026-11-03 22:24:16 +08:00
fix(ru): align proofreading corrections with the Simplified Chinese original (#2004)
* docs(ru): correct proofreading issues in prose and code examples * docs(ru): align proofreading edits with Simplified Chinese source * fix(ru): repair generated Zig statements and complete comment translations
This commit is contained in:
@@ -67,7 +67,7 @@
|
||||
Next *ListNode // Указатель на следующий узел
|
||||
}
|
||||
|
||||
// NewListNode Конструктор, создает новый узел
|
||||
// NewListNode — функция-конструктор, создающая новый связный список.
|
||||
func NewListNode(val int) *ListNode {
|
||||
return &ListNode{
|
||||
Val: val,
|
||||
@@ -195,7 +195,7 @@
|
||||
|
||||
```python title="linked_list.py"
|
||||
# Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4
|
||||
# Инициализация отдельных узлов
|
||||
# Инициализация каждого узла
|
||||
n0 = ListNode(1)
|
||||
n1 = ListNode(3)
|
||||
n2 = ListNode(2)
|
||||
@@ -212,7 +212,7 @@
|
||||
|
||||
```cpp title="linked_list.cpp"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
ListNode* n0 = new ListNode(1);
|
||||
ListNode* n1 = new ListNode(3);
|
||||
ListNode* n2 = new ListNode(2);
|
||||
@@ -229,7 +229,7 @@
|
||||
|
||||
```java title="linked_list.java"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
ListNode n0 = new ListNode(1);
|
||||
ListNode n1 = new ListNode(3);
|
||||
ListNode n2 = new ListNode(2);
|
||||
@@ -246,7 +246,7 @@
|
||||
|
||||
```csharp title="linked_list.cs"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
ListNode n0 = new(1);
|
||||
ListNode n1 = new(3);
|
||||
ListNode n2 = new(2);
|
||||
@@ -263,7 +263,7 @@
|
||||
|
||||
```go title="linked_list.go"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
n0 := NewListNode(1)
|
||||
n1 := NewListNode(3)
|
||||
n2 := NewListNode(2)
|
||||
@@ -280,7 +280,7 @@
|
||||
|
||||
```swift title="linked_list.swift"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
let n0 = ListNode(x: 1)
|
||||
let n1 = ListNode(x: 3)
|
||||
let n2 = ListNode(x: 2)
|
||||
@@ -297,7 +297,7 @@
|
||||
|
||||
```javascript title="linked_list.js"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
const n0 = new ListNode(1);
|
||||
const n1 = new ListNode(3);
|
||||
const n2 = new ListNode(2);
|
||||
@@ -314,7 +314,7 @@
|
||||
|
||||
```typescript title="linked_list.ts"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
const n0 = new ListNode(1);
|
||||
const n1 = new ListNode(3);
|
||||
const n2 = new ListNode(2);
|
||||
@@ -331,7 +331,7 @@
|
||||
|
||||
```dart title="linked_list.dart"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */\
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
ListNode n0 = ListNode(1);
|
||||
ListNode n1 = ListNode(3);
|
||||
ListNode n2 = ListNode(2);
|
||||
@@ -348,7 +348,7 @@
|
||||
|
||||
```rust title="linked_list.rs"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
let n0 = Rc::new(RefCell::new(ListNode { val: 1, next: None }));
|
||||
let n1 = Rc::new(RefCell::new(ListNode { val: 3, next: None }));
|
||||
let n2 = Rc::new(RefCell::new(ListNode { val: 2, next: None }));
|
||||
@@ -366,7 +366,7 @@
|
||||
|
||||
```c title="linked_list.c"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
ListNode* n0 = newListNode(1);
|
||||
ListNode* n1 = newListNode(3);
|
||||
ListNode* n2 = newListNode(2);
|
||||
@@ -383,7 +383,7 @@
|
||||
|
||||
```kotlin title="linked_list.kt"
|
||||
/* Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4 */
|
||||
// Инициализация отдельных узлов
|
||||
// Инициализация каждого узла
|
||||
val n0 = ListNode(1)
|
||||
val n1 = ListNode(3)
|
||||
val n2 = ListNode(2)
|
||||
@@ -400,7 +400,7 @@
|
||||
|
||||
```ruby title="linked_list.rb"
|
||||
# Инициализация связного списка 1 -> 3 -> 2 -> 5 -> 4
|
||||
# Инициализация отдельных узлов
|
||||
# Инициализация каждого узла
|
||||
n0 = ListNode.new(1)
|
||||
n1 = ListNode.new(3)
|
||||
n2 = ListNode.new(2)
|
||||
@@ -474,7 +474,7 @@
|
||||
| Добавление элемента | $O(n)$ | $O(1)$ |
|
||||
| Удаление элемента | $O(n)$ | $O(1)$ |
|
||||
|
||||
## Основные типы связных списков
|
||||
## Распространенные типы связных списков
|
||||
|
||||
Как показано на рисунке ниже, существует три распространенных типа связных списков.
|
||||
|
||||
@@ -538,7 +538,7 @@
|
||||
Prev *DoublyListNode // Указатель на предыдущий узел
|
||||
}
|
||||
|
||||
// NewDoublyListNode Инициализация
|
||||
// NewDoublyListNode инициализирует узел двусвязного списка.
|
||||
func NewDoublyListNode(val int) *DoublyListNode {
|
||||
return &DoublyListNode{
|
||||
Val: val,
|
||||
@@ -680,7 +680,7 @@
|
||||
end
|
||||
```
|
||||
|
||||

|
||||

|
||||
|
||||
## Типичные применения связных списков
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
|
||||
```cpp title="list.cpp"
|
||||
/* Инициализация списка */
|
||||
// Обрати внимание: в C++ vector соответствует описываемому здесь nums
|
||||
// Обратите внимание: в C++ vector соответствует описываемому здесь nums
|
||||
// Без начальных значений
|
||||
vector<int> nums1;
|
||||
// С начальными значениями
|
||||
@@ -44,7 +44,7 @@
|
||||
/* Инициализация списка */
|
||||
// Без начальных значений
|
||||
List<Integer> nums1 = new ArrayList<>();
|
||||
// С начальными значениями (обрати внимание: элементы массива должны использовать обертку Integer[] вместо int[])
|
||||
// С начальными значениями (обратите внимание: элементы массива должны использовать обертку Integer[] вместо int[])
|
||||
Integer[] numbers = new Integer[] { 1, 3, 2, 5, 4 };
|
||||
List<Integer> nums = new ArrayList<>(Arrays.asList(numbers));
|
||||
```
|
||||
@@ -153,7 +153,7 @@
|
||||
|
||||
### Доступ к элементам
|
||||
|
||||
Поскольку в этом разделе список рассматривается как структура на основе динамического массива, доступ к элементам и их обновление можно выполнять за $O(1)$ времени, что очень эффективно.
|
||||
Поскольку в этом разделе список рассматривается как структура на основе динамического массива, доступ к элементам и изменение их значений можно выполнять за $O(1)$ времени, что очень эффективно.
|
||||
|
||||
=== "Python"
|
||||
|
||||
@@ -161,8 +161,8 @@
|
||||
# Доступ к элементу
|
||||
num: int = nums[1] # Доступ к элементу по индексу 1
|
||||
|
||||
# Обновление элемента
|
||||
nums[1] = 0 # Обновить элемент по индексу 1 значением 0
|
||||
# Изменение элемента
|
||||
nums[1] = 0 # Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "C++"
|
||||
@@ -171,8 +171,8 @@
|
||||
/* Доступ к элементу */
|
||||
int num = nums[1]; // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "Java"
|
||||
@@ -181,8 +181,8 @@
|
||||
/* Доступ к элементу */
|
||||
int num = nums.get(1); // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums.set(1, 0); // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums.set(1, 0); // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "C#"
|
||||
@@ -191,8 +191,8 @@
|
||||
/* Доступ к элементу */
|
||||
int num = nums[1]; // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "Go"
|
||||
@@ -201,8 +201,8 @@
|
||||
/* Доступ к элементу */
|
||||
num := nums[1] // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0 // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0 // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "Swift"
|
||||
@@ -211,8 +211,8 @@
|
||||
/* Доступ к элементу */
|
||||
let num = nums[1] // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0 // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0 // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "JS"
|
||||
@@ -221,8 +221,8 @@
|
||||
/* Доступ к элементу */
|
||||
const num = nums[1]; // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "TS"
|
||||
@@ -231,8 +231,8 @@
|
||||
/* Доступ к элементу */
|
||||
const num: number = nums[1]; // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "Dart"
|
||||
@@ -241,8 +241,8 @@
|
||||
/* Доступ к элементу */
|
||||
int num = nums[1]; // Доступ к элементу по индексу 1
|
||||
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "Rust"
|
||||
@@ -250,8 +250,8 @@
|
||||
```rust title="list.rs"
|
||||
/* Доступ к элементу */
|
||||
let num: i32 = nums[1]; // Доступ к элементу по индексу 1
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0; // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0; // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "C"
|
||||
@@ -265,8 +265,8 @@
|
||||
```kotlin title="list.kt"
|
||||
/* Доступ к элементу */
|
||||
val num = nums[1] // Доступ к элементу по индексу 1
|
||||
/* Обновление элемента */
|
||||
nums[1] = 0 // Обновить элемент по индексу 1 значением 0
|
||||
/* Изменение элемента */
|
||||
nums[1] = 0 // Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
=== "Ruby"
|
||||
@@ -274,13 +274,13 @@
|
||||
```ruby title="list.rb"
|
||||
# Доступ к элементу
|
||||
num = nums[1] # Доступ к элементу по индексу 1
|
||||
# Обновление элемента
|
||||
nums[1] = 0 # Обновить элемент по индексу 1 значением 0
|
||||
# Изменение элемента
|
||||
nums[1] = 0 # Изменить значение элемента с индексом 1 на 0
|
||||
```
|
||||
|
||||
??? pythontutor "Визуализация выполнения"
|
||||
|
||||
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%0A%20%20%20%20num%20%3D%20nums%5B1%5D%20%20%23%20%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%B8%D1%82%D1%8C%D1%81%D1%8F%20%D0%BA%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%201%20%D0%BF%D0%BE%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%0A%20%20%20%20%23%20%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%0A%20%20%20%20nums%5B1%5D%20%3D%200%20%20%20%20%23%20%D0%9E%D0%B1%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%201%20%D0%B4%D0%BE%200&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
|
||||
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%0A%20%20%20%20%23%20%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B8%D1%82%D1%8C%20%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%0A%20%20%20%20num%20%3D%20nums%5B1%5D%20%20%23%20%D0%94%D0%BE%D1%81%D1%82%D1%83%D0%BF%20%D0%BA%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%83%20%D0%BF%D0%BE%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D1%83%201%0A%0A%20%20%20%20%23%20%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%0A%20%20%20%20nums%5B1%5D%20%3D%200%20%20%20%20%23%20%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C%20%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%20%D1%81%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%BE%D0%BC%201%20%D0%BD%D0%B0%200&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
|
||||
|
||||
### Вставка и удаление элементов
|
||||
|
||||
@@ -944,7 +944,7 @@
|
||||
|
||||
??? pythontutor "Визуализация выполнения"
|
||||
|
||||
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20%0A%20%20%20%20%23%20%D0%9E%D1%82%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums.sort%28%29%20%20%23%20%D0%A1%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0%D0%BF%D0%BE%D1%81%D0%BB%D0%B5%2C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D1%8B%20%D0%BF%D0%BE%20%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%B0%D0%BD%D0%B8%D1%8E&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
|
||||
https://pythontutor.com/render.html#code=%22%22%22Driver%20Code%22%22%22%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20%23%20%D0%98%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums%20%3D%20%5B1%2C%203%2C%202%2C%205%2C%204%5D%0A%20%20%20%20%0A%20%20%20%20%23%20%D0%9E%D1%82%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D1%82%D1%8C%20%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%0A%20%20%20%20nums.sort%28%29%20%20%23%20%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%20%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B8%20%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D1%8B%20%D1%81%D0%BF%D0%B8%D1%81%D0%BA%D0%B0%20%D1%80%D0%B0%D1%81%D0%BF%D0%BE%D0%BB%D0%B0%D0%B3%D0%B0%D1%8E%D1%82%D1%81%D1%8F%20%D0%BF%D0%BE%20%D0%B2%D0%BE%D0%B7%D1%80%D0%B0%D1%81%D1%82%D0%B0%D0%BD%D0%B8%D1%8E&cumulative=false&curInstr=3&heapPrimitives=nevernest&mode=display&origin=opt-frontend.js&py=311&rawInputLstJSON=%5B%5D&textReferences=false
|
||||
|
||||
## Реализация списка
|
||||
|
||||
|
||||
@@ -14,9 +14,9 @@
|
||||
| -------------- | --------------------------------------- | ----------------------------------------- | ------------------------------------------------------- |
|
||||
| Назначение | Долговременное хранение данных, включая ОС, программы, файлы и т.д. | Временное хранение выполняемых программ и обрабатываемых данных | Хранение часто используемых данных и инструкций, уменьшающее число обращений CPU к памяти |
|
||||
| Энергозависимость | Данные не теряются после отключения питания | Данные теряются после отключения питания | Данные теряются после отключения питания |
|
||||
| Емкость | Большая, уровень TB | Меньшая, уровень GB | Очень малая, уровень MB |
|
||||
| Емкость | Большая, на уровне TB | Меньшая, на уровне GB | Очень малая, на уровне MB |
|
||||
| Скорость | Низкая, от сотен до тысяч MB/s | Высокая, десятки GB/s | Очень высокая, десятки и сотни GB/s |
|
||||
| Цена | Низкая, единицы валюты за GB | Высокая, десятки и сотни валютных единиц за GB | Очень высокая, входит в стоимость CPU |
|
||||
| Цена (в китайских юанях) | Низкая, от нескольких десятых долей юаня до нескольких юаней за GB | Высокая, десятки и сотни юаней за GB | Очень высокая, входит в стоимость CPU |
|
||||
|
||||
Компьютерную систему хранения можно представить в виде пирамиды, показанной на рисунке ниже. Чем ближе устройство хранения к вершине пирамиды, тем оно быстрее, тем меньше его емкость и тем выше его стоимость. Такая многоуровневая конструкция возникла не случайно, а стала результатом тщательных инженерных компромиссов.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user