二维数组按行和按列遍历的效率

按行遍历的效率大概是是按列遍历的0.5倍

   在c语言中,数组在内存中是按行存储的,按行遍历时可以由指向数组第一个数的指针一直向后遍历,由于二维数组的内存地址是连续的,当前行的尾与下一行的头相邻,所以可以直接到下一行

我们眼中的二维数组:

在这里插入图片描述

内存中的二维数组:

在这里插入图片描述

按行遍历比按列遍历的效率高体现在这些方面:

   1. CPU高速缓存:在计算机系统中,CPU高速缓存(英语:CPU Cache,在本文中简称缓存)是用于减少处理器访问内存所需平均时间的部件。在金字塔式存储体系中它位于自顶向下的第二层,仅次于CPU寄存器。其容量远小于内存,但速度却可以接近处理器的频率。当处理器发出内存访问请求时,会先查看缓存内是否有请求数据。如果存在(命中),则不经访问内存直接返回该数据;如果不存在(失效),则要先把内存中的相应数据载入缓存,再将其返回处理器。缓存之所以有效,主要是因为程序运行时对内存的访问呈现局部性(Locality)特征。这种局部性既包括空间局部性(Spatial Locality),也包括时间局部性(Temporal Locality)。有效利用这种局部性,缓存可以达到极高的命中率。(百度百科解释)。
    2. 缓存从内存中抓取一般都是整个数据块,所以它的物理内存是连续的,几乎都是同行不同列的,而如果内循环以列的方式进行遍历的话,将会使整个缓存块无法被利用,而不得不从内存中读取数据,而从内存读取速度是远远小于从缓存中读取数据的。随着数组元素越来越多,按列读取速度也会越来越慢。

可以用以下代码自行测试:

#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
int main()
{const int MAX_ROW = 2000;const int MAX_COL = 2000;int(*a)[MAX_COL] = new int[MAX_ROW][MAX_COL];clock_t start, finish;//先行后列start = clock();for (int i = 0; i<MAX_ROW; i++)for (int j = 0; j<MAX_COL; j++)a[i][j] = 1;finish = clock();//totaltime=(double)()/CLOCKS_PER_SEC;cout << "先行后列遍历时间为:" << finish - start << "ms" << endl;//先列后行start = clock();for (int i = 0; i<MAX_COL; i++)for (int j = 0; j<MAX_ROW; j++)a[j][i] = 1;finish = clock();//totaltime=(double)()/CLOCKS_PER_SEC;cout << "先列后行遍历时间为:" << finish - start << "ms" << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494945.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

解读《自适应机器人交互白皮书》:机器人交互需要突破性技术

来源&#xff1a;机器人创新生态摘要&#xff1a;7月11日雷克大会&#xff0c;英特尔中国研究院机器人交互实验室研发总监任海兵在演讲时&#xff0c;就白皮书中的内容进行了重点解读。个人服务机器人在近年来随着人工智能的快速发展开始得到不少关注。个人服务机器人是否真正能…

最长升序子串1231

题目与解析 给定n个数字&#xff0c;在这n个数字中找出最长上升子序列。 那么什么是上升子序列呢&#xff1f; 上升子序列就是在一个数列中递增的部分&#xff0c;不一定是连续的&#xff0c;比如说 图中的24678和24679都是数列24635798的上升子序列 解题思路 就按图上2 4 …

科学革命与科学教科书

来源&#xff1a;《出版科学》2018年第4期摘要&#xff1a;借助科学哲学的反思&#xff0c;加上科学家和出版人的创新实践&#xff0c;一定能够出现既能促进常规科学研究、又能为科学革命做出某些准备的新型科学教科书。《科学革命的结构》托马斯 • 库恩著&#xff0c;金吾伦、…

物联网可应用于十大行业嘛?

来源&#xff1a;亿欧智库摘要&#xff1a;近些年来&#xff0c;全球经济增长乏力&#xff0c;物联网已变成了各国经济发展的新动力。基于此&#xff0c;亿欧智库近日将发布一份新的报告《2018物联网行业应用研究报告》&#xff0c;报告总结出了物联网的十大应用行业&#xff0…

浅析死锁

什么是死锁&#xff1f; 死锁就是两个或多个进程在执行的过程中&#xff0c;由于竞争资源或者由于彼此通信而造成的一种阻塞现象&#xff0c;当进程处于这种状态时&#xff0c;如果没有外力的作用&#xff0c;这些进程都无法继续向前进行。这是操作系统层面的一个错误&#xff…

2018年全球AI突破性技术TOP10

来源&#xff1a;艾瑞网摘要&#xff1a;聪明的科技公司都不再单一的专注于自己的传统业务&#xff0c;而是着眼于未来&#xff0c;不断创新技术&#xff0c;跨界融合打造一个整合的生态系统。人工智能是个高科技、宽领域、多维度、跨学科的集大成者&#xff0c;从立足大数据、…

全球11个行业、71家知名企业的创新Lab与布局

来源&#xff1a;CBInsights新技术的革新引发了商业世界重构的浪潮&#xff0c;在这一波由人工智能引领的创新潮流里唯有拥抱变化才能不为时代淘汰&#xff0c;顺应趋势取得更大的发展。新技术的革新引发了商业世界重构的浪潮&#xff0c;在这一波由人工智能引领的创新潮流里唯…

组队竞赛

题目解析&#xff1a; 队伍的水平值等于该队伍队员中第二高水平值&#xff0c;为了所有队伍的水平值总和最大的解法&#xff0c;也就是说每个队伍的第二个值是尽可能大的值。所以实际值把最大值放到最右边&#xff0c;最小是放到最左边。 解题思路&#xff1a; 本题的主要思路是…

【SD】差异值 生成 同一人物 制作 表情包 【1】

说明&#xff1a;只对AI生成的人物&#xff0c;效果稳定。 Reference差异值 生成表情 首先生成一张图片。 测试命令&#xff1a;1 man,chibi,full body, 模型&#xff1a;envyclarityxl02_v10.safetensors [f6c13197db] 种子&#xff1a;2704867166 》》测试命令&#xff1a…

MySQL索引原理、失效情况

声明&#xff1a;本文是小编在学习过程中&#xff0c;东拼西凑整理&#xff0c;如有雷同&#xff0c;纯属借鉴。 Mysql5.7的版本, InnoDB引擎 目录 1 mysql索引知识 1.1 BTree索引 1.2 主键索引和普通索引的区别 1.3 唯一索引vs普通索引 2 mysql索引优化 2.1 查看索引使…

2018年人工智能全景图与发展趋势分析

来源&#xff1a;专知摘要&#xff1a;风险资本家马特图尔克&#xff08;Matt Turck&#xff09;最近发布文章&#xff0c;能力越大&#xff0c;责任越大&#xff0c;介绍了大数据与人工智能在2018年发展的趋势&#xff0c;并发布了全景图&#xff0c;涵盖基础架构、开源框架、…

李晨 | 无人机市场浅析

来源&#xff1a;无人机作者简介&#xff1a;西北工业大学民用无人机研发中心副主任无人机市场浅析无人机市场分类过去无人机一直是军用为主&#xff0c;不论是伊拉克战争还是好莱坞大片&#xff0c;无人机在执行军事任务方面起到了不可替代的作用。在2010年以前&#xff0c;军…

linux 监控网络IO、磁盘、CPU、内存

linux 监控网络IO、磁盘、CPU、内存 CPU&#xff1a;vmstat &#xff0c;sar –u&#xff0c;top磁盘IO&#xff1a;iostat –xd&#xff0c;sar –d&#xff0c;top网络IO&#xff1a;iftop -n&#xff0c;ifstat&#xff0c;dstat –nt&#xff0c;sar -n DEV 2 3磁盘容量&a…

不要二

题目解析&#xff1a; 本题的重点是要读懂题意&#xff0c;并且需要多读两遍&#xff0c;才能读懂&#xff0c;本题本质就是在二维数组中每个坐标去放蛋糕&#xff0c; 一个坐标位置放了蛋糕&#xff0c;跟他欧几里得距离为2的位置不能放蛋糕&#xff0c;这个就是关键点。对于两…

干货|100张PPT讲透工业机器人的机械结构

来源&#xff1a;机电微学堂未来智能实验室是人工智能学家与科学院相关机构联合成立的人工智能&#xff0c;互联网和脑科学交叉研究机构。未来智能实验室的主要工作包括&#xff1a;建立AI智能系统智商评测体系&#xff0c;开展世界人工智能智商评测&#xff1b;开展互联网&…

基础理论研究是人工智能持续发展的保证

来源&#xff1a;图灵人工智能摘要&#xff1a; 人工智能的主流技术的发展大致经历了三个重要的历程。人工智能的主流技术的发展大致经历了三个重要的历程。1956-1965年&#xff0c;人工智能的形成期&#xff0c;强调推理的作用。一般认为只要机器被赋予逻辑推理能力就可以实现…

代换链表入口节点

题目&#xff1a; 给定一个链表&#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。为了表示给定链表中的环&#xff0c;我们使用整数 pos 来表示链表尾连接到链表中的位置&#xff08;索引从 0 开始&#xff09;。 如果 pos 是 -1&#xff0c;…

新AI技术破解“人脑密码”的艰辛历程

来源&#xff1a;人工智能大健康摘要&#xff1a; 就智能感知而言&#xff0c;如何获取人类脑部思维同样是业内长期探索的问题。就智能感知而言&#xff0c;如何获取人类脑部思维同样是业内长期探索的问题。可以预见的是&#xff0c;单纯通过思维指令来控制人工智能的行为&…

JavaScript事件捕获与事件冒泡原理 IE和DOM之间存在哪些主要差别

事件——怎样使用事件以及IE和DOM事件模型之间存在哪些主要差别。 &#xff08;1&#xff09;冒泡型事件&#xff1a;事件按照从最特定的事件目标到最不特定的事件目标(document对象)的顺序触发。 IE 5.5: div -> body -> document IE 6.0: div -> body -> html -&…

复制带随机节点的链表

题目&#xff1a; 给定一个链表&#xff0c;每个节点包含一个额外增加的随机指针&#xff0c;该指针可以指向链表中的任何节点或空节点。 要求返回这个链表的深拷贝。 解题思路&#xff1a; 这道题的一个难点就是链表中的随机指针&#xff0c;我能想到的就是在这个链表的每个节…