 Hello 算法 1.1.0 Dart版forEach 方法遍历数组 nums.forEach((_num) { count += _num; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List Hello 算法 1.1.0 Dart版forEach 方法遍历数组 nums.forEach((_num) { count += _num; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List- 载机制。 ‧ 缓存行:缓存不是单个字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行 的传输形式更加高效。 ‧ 预取机制:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式 将数据加载至缓存之中,从而提升命中率。 ‧ 空间局部性:如果一个数据被访问,那么它附近的数据可能近期也会被访问。因此,缓存在加载某一数 据时,也会加载其附近的数据,以提高命中率。 占用空间:链表元素比数组元素占用空间更多,导致缓存中容纳的有效数据量更少。 ‧ 缓存行:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到无效数据的比例更高。 ‧ 预取机制:数组比链表的数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。 ‧ 空间局部性:数组被存储在集中的内存空间中,因此被加载数据附近的数据更有可能即将被访问。 总体而言,数组具有更高的缓存命中率,因此它在操作 0 码力 | 378 页 | 18.45 MB | 1 年前3
 Hello 算法 1.2.0 简体中文 Dart 版forEach 方法遍历数组 nums.forEach((_num) { count += _num; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List Hello 算法 1.2.0 简体中文 Dart 版forEach 方法遍历数组 nums.forEach((_num) { count += _num; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List- 载机制。 ‧ 缓存行:缓存不是单个字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行 的传输形式更加高效。 ‧ 预取机制:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式 将数据加载至缓存之中,从而提升命中率。 ‧ 空间局部性:如果一个数据被访问,那么它附近的数据可能近期也会被访问。因此,缓存在加载某一数 据时,也会加载其附近的数据,以提高命中率。 占用空间:链表元素比数组元素占用空间更多,导致缓存中容纳的有效数据量更少。 ‧ 缓存行:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到无效数据的比例更高。 ‧ 预取机制:数组比链表的数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。 ‧ 空间局部性:数组被存储在集中的内存空间中,因此被加载数据附近的数据更有可能即将被访问。 总体而言,数组具有更高的缓存命中率,因此它在操作 0 码力 | 378 页 | 18.46 MB | 10 月前3
 Hello 算法 1.0.0 Dart版forEach 方法遍历数组 nums.forEach((_num) { count += _num; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List Hello 算法 1.0.0 Dart版forEach 方法遍历数组 nums.forEach((_num) { count += _num; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List- 载机制。 ‧ 缓存行:缓存不是单个字节地存储与加载数据,而是以缓存行为单位。相比于单个字节的传输,缓存行 的传输形式更加高效。 ‧ 预取机制:处理器会尝试预测数据访问模式(例如顺序访问、固定步长跳跃访问等),并根据特定模式 将数据加载至缓存之中,从而提升命中率。 ‧ 空间局部性:如果一个数据被访问,那么它附近的数据可能近期也会被访问。因此,缓存在加载某一数 据时,也会加载其附近的数据,以提高命中率。 占用空间:链表元素比数组元素占用空间更多,导致缓存中容纳的有效数据量更少。 ‧ 缓存行:链表数据分散在内存各处,而缓存是“按行加载”的,因此加载到无效数据的比例更高。 ‧ 预取机制:数组比链表的数据访问模式更具“可预测性”,即系统更容易猜出即将被加载的数据。 ‧ 空间局部性:数组被存储在集中的内存空间中,因此被加载数据附近的数据更有可能即将被访问。 总体而言,数组具有更高的缓存命中率,因此它在操作 0 码力 | 377 页 | 17.56 MB | 1 年前3
 Hello 算法 1.2.0 繁体中文 Dart 版forEach 方法走訪陣列 nums.forEach((_num) { count += _num; }); } 6. 查詢元素 在陣列中查詢指定元素需要走訪陣列,每輪判斷元素值是否匹配,若匹配則輸出對應索引。 因為陣列是線性資料結構,所以上述查詢操作被稱為“線性查詢”。 // === File: array.dart === /* 在陣列中查詢指定元素 */ int find(List Hello 算法 1.2.0 繁体中文 Dart 版forEach 方法走訪陣列 nums.forEach((_num) { count += _num; }); } 6. 查詢元素 在陣列中查詢指定元素需要走訪陣列,每輪判斷元素值是否匹配,若匹配則輸出對應索引。 因為陣列是線性資料結構,所以上述查詢操作被稱為“線性查詢”。 // === File: array.dart === /* 在陣列中查詢指定元素 */ int find(List- 制。 ‧ 快取行:快取不是單個位元組地儲存與載入資料,而是以快取行為單位。相比於單個位元組的傳輸,快 取行的傳輸形式更加高效。 ‧ 預取機制:處理器會嘗試預測資料訪問模式(例如順序訪問、固定步長跳躍訪問等),並根據特定模式 將資料載入至快取之中,從而提升命中率。 ‧ 空間區域性:如果一個數據被訪問,那麼它附近的資料可能近期也會被訪問。因此,快取在載入某一資 料時,也會載入其附近的資料,以提高命中率。 佔用空間:鏈結串列元素比陣列元素佔用空間更多,導致快取中容納的有效資料量更少。 ‧ 快取行:鏈結串列資料分散在記憶體各處,而快取是“按行載入”的,因此載入到無效資料的比例更高。 ‧ 預取機制:陣列比鏈結串列的資料訪問模式更具“可預測性”,即系統更容易猜出即將被載入的資料。 ‧ 空間區域性:陣列被儲存在集中的記憶體空間中,因此被載入資料附近的資料更有可能即將被訪問。 總體而言,陣列具有更高的快取命中率,因此它在操 0 码力 | 378 页 | 18.77 MB | 10 月前3
 Hello 算法 1.0.0b5 Dart版通过 forEach 方法遍历数组 nums.forEach((element) { count++; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List 行比较。如果两者匹 配,那么密码就被视为正确。 ‧ 数据完整性检查:数据发送方可以计算数据的哈希值并将其一同发送;接收方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整的。 对于密码学的相关应用,为了防止从哈希值推导出原始密码等逆向工程,哈希算法需要具备更高等级的安全 特性。 ‧ 抗碰撞性:应当极其困难找到两个不同的输入,使得它们的哈希值相同。 思考的是,为什么要强调对质数取模,或者说对合数取模的弊端是什么?这是一个有趣的问题。 先抛出结论:当我们使用大质数作为模数时,可以最大化地保证哈希值的均匀分布。因为质数不会与其他数 字存在公约数,可以减少因取模操作而产生的周期性模式,从而避免哈希冲突。 举个例子,假设我们选择合数 9 作为模数,它可以被 3 整除。那么所有可以被 3 整除的 key 都会被映射到 0、 3、6 这三个哈希值。 modulus = 9 key0 码力 | 376 页 | 30.67 MB | 1 年前3 Hello 算法 1.0.0b5 Dart版通过 forEach 方法遍历数组 nums.forEach((element) { count++; }); } 6. 查找元素 在数组中查找指定元素需要遍历数组,每轮判断元素值是否匹配,若匹配则输出对应索引。 因为数组是线性数据结构,所以上述查找操作被称为“线性查找”。 // === File: array.dart === /* 在数组中查找指定元素 */ int find(List 行比较。如果两者匹 配,那么密码就被视为正确。 ‧ 数据完整性检查:数据发送方可以计算数据的哈希值并将其一同发送;接收方可以重新计算接收到的 数据的哈希值,并与接收到的哈希值进行比较。如果两者匹配,那么数据就被视为完整的。 对于密码学的相关应用,为了防止从哈希值推导出原始密码等逆向工程,哈希算法需要具备更高等级的安全 特性。 ‧ 抗碰撞性:应当极其困难找到两个不同的输入,使得它们的哈希值相同。 思考的是,为什么要强调对质数取模,或者说对合数取模的弊端是什么?这是一个有趣的问题。 先抛出结论:当我们使用大质数作为模数时,可以最大化地保证哈希值的均匀分布。因为质数不会与其他数 字存在公约数,可以减少因取模操作而产生的周期性模式,从而避免哈希冲突。 举个例子,假设我们选择合数 9 作为模数,它可以被 3 整除。那么所有可以被 3 整除的 key 都会被映射到 0、 3、6 这三个哈希值。 modulus = 9 key0 码力 | 376 页 | 30.67 MB | 1 年前3
共 5 条
- 1













