栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

7.25笔记 C++数组行列遍历区别、6个数生成7个数、数组旋转

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

7.25笔记 C++数组行列遍历区别、6个数生成7个数、数组旋转

C++数组行列遍历区别
  • 按行遍历的效率更高。
  • 对于clickhouse-client-cpp,由于数据是按列存储的,按列遍历的效率更好
具体体现 1、CPU高速缓存

计算机存在Cache机制,则直接返回该数据;如果不存在,则要先把内存中的相应数据载入缓存,再将其返回处理器。

缓存物理内存是连续的,是同行不同列,以列进行遍历会使缓存无法利用,从而从内存中读取数据,而从内存读取速度是远远小于从缓存中读取数据的。

2、分页调度

物理内存是以页的方式进行划分的,当一个二维数组很大是如 int[128][1024],假设一页的内存为4096个字节,而每一行正好占据内存的一页(int 存储是4个字节),如果以列的形式进行遍历,就会发生128*1024次的页面调度,而如果以行遍历则只有128次页面调度,而页面调度是有时间消耗的,因而调度次数越多,遍历的时间就越长。

用一个骰子生成1到7的随机数
  • 扔到奇数,记为0
  • 扔到偶数,记为1
  • 连续扔三次,就会得到一个0到7的二进制数。比如010就是3,100就是5。
  • 如果最终得到0,就重新再扔三次。
数组旋转
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/7/25 10:46
# @Author  : hongyuan
# @File    : arr_trans.py
# @Software: PyCharm

original = [
  [ 5, 1, 9,11,1],
  [ 2, 4, 8,10,1],
  [13, 3, 6, 7,1],
  [15,14,12,16,1],
  [11,12,13,14,15],
]

original2 = [
  [ 5, 1, 9,11],
  [ 2, 4, 8,10],
  [13, 3, 6, 7],
  [15,14,12,16],

]
"""
original是n*n的数组
return:
[
[11, 15, 13, 2, 5], 
[12, 14, 3, 4, 1], 
[13, 12, 6, 8, 9], 
[14, 16, 7, 10, 11], 
[15, 1, 1, 1, 1]
]

[
[15, 13, 2, 5], 
[14, 3, 4, 1], 
[12, 6, 8, 9], 
[16, 7, 10, 11]
]
"""

def tran_array(original):
    n1 = len(original)
    n2 = len(original[0])

    step=0
    start_point_x = 0
    start_point_y = 0
    print(original)
    while float(step) < float(n1)/2:
        tmp = 0
        tmp2 = 0
        start_point_x = start_point_x + step
        start_point_y = start_point_y + step
        if n1-step*2 in (2,3):
            while start_point_x < n1-step*2 :
                tmp = original[start_point_x][start_point_y]
                original[start_point_x][start_point_y] = original[n1-1-start_point_y][start_point_x]
                print('被置换的位置')
                print(start_point_x,start_point_y)

                tmp2 = original[start_point_y][n2-1-start_point_x]
                original[start_point_y][n2-1-start_point_x] = tmp
                print('被置换的位置')
                print(start_point_y,n2-1-start_point_x)

                tmp = original[n1-1-start_point_x][n2-1-start_point_y]
                original[n1-1-start_point_x][n2-1-start_point_y] = tmp2
                print('被置换的位置')
                print(n1-1-start_point_x,n2-1-start_point_y)

                original[n1-1-start_point_y][start_point_x] = tmp
                print('被置换的位置')
                print(n1-1-start_point_y,start_point_x)

                # if start_point_x == n1-step*2-2:
                #     start_point_x = start_point_x + 1#4行4列,按顺序置换3轮即可。

                start_point_x = start_point_x + 1
        else:
            while start_point_x < n1 - step * 2 - 1:
                tmp = original[start_point_x][start_point_y]
                original[start_point_x][start_point_y] = original[n1 - 1 - start_point_y][start_point_x]
                print('被置换的位置')
                print(start_point_x, start_point_y)

                tmp2 = original[start_point_y][n2 - 1 - start_point_x]
                original[start_point_y][n2 - 1 - start_point_x] = tmp
                print('被置换的位置')
                print(start_point_y, n2 - 1 - start_point_x)

                tmp = original[n1 - 1 - start_point_x][n2 - 1 - start_point_y]
                original[n1 - 1 - start_point_x][n2 - 1 - start_point_y] = tmp2
                print('被置换的位置')
                print(n1 - 1 - start_point_x, n2 - 1 - start_point_y)

                original[n1 - 1 - start_point_y][start_point_x] = tmp
                print('被置换的位置')
                print(n1 - 1 - start_point_y, start_point_x)

                # if start_point_x == n1-step*2-2:
                #     start_point_x = start_point_x + 1#4行4列,按顺序置换3轮即可。

                start_point_x = start_point_x + 1

        start_point_x = 0 #重置
        start_point_y = 0 #重置
        step = step + 1

    print(original)
    return original

if __name__ == '__main__':
    tran_array(original2)

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1026760.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号