算法之美--2.3.1 Z字形编排问题
2016-12-08 00:23:11
写在前面的话:万事贵在坚持,万事开头难,有很多的东西要学,要知道主次,讲究效率,大的方向对就行!坚持........
一、图像压缩编码中的Z字排序
JPEG(Joint Photographic ExpertsGroup)是一种常见的图像文件格式,也是目前静态图像中压缩比最高的一种图像文件格式,它综合运用了多种压缩技术而达到一种极高的压缩比例。JPEG是作为一个国际数字图像压缩标准,压缩技术十分先进,它用有损压缩方式去除冗余的图像和彩色数据,获取得极高的压缩率的同时能展现十分丰富生动的图像。目前,它已被广泛地应用与多媒体和网络程序中。通常,在JEPG编码过程中,有一个非常重要的步骤,即Z字形编排过程。Z字形编排过程大致是这样的:经过前期处理的图像被分为若干个 的小图像块,此时就从小图像块的左上角开始沿Z字形对图像元素进行遍历,并将遍历所得的结果重新写入等大小的图像块中,整个过程如图2-15所示。
要实现这样一个Z字形排列可能读者咋一看会感觉无从下手。但是在分析了Z字形遍历原矩阵过程中的走向规律,其实可以设计一个非常简单的算法来实现这种编排。对于原始矩阵matrix中的任意元素matrix[i][j]的遍历走向规律可以分为如下三种情况
- 如果二维数组中的元素matrix[i][j]中纵坐标j是偶数,且i=0或者i=7,那么遍历路径在矩阵中的走向就是水平向右移动一格。
- 如果二维数组中的元素matrix[i][j]中纵坐标i是奇数,且j=0或者j=7,,那么遍历路径在矩阵中的走向就是垂直向下移动一格。
- 除上述规则以外的情况,如果二维数组中的元素matrix[i][j]的横纵坐标和i+j是偶数,则遍历路径在矩阵中的走向就是右上角移动一格;否则,若i+j是奇数,则遍历路径在矩阵中的走向就是左下角移动一格。
#include <iostream>
#include <iomanip> using namespace std; #define SIZE 8
int main(int argc, char **argv[])
{
int matrix[SIZE][SIZE] = {};
int a[SIZE][SIZE] = { }; int *p = nullptr;
p = &matrix[][];
//初始化矩阵
for (int k = ; k < SIZE*SIZE; k++)
{
*p++ = k;
}
//打印原始矩阵
cout << "原始矩阵如下:" << endl;
for (int k= ;k < SIZE;k++)
{
for (int h = ; h < SIZE;h++)
{
cout << setw() << *(*(matrix + k) + h);
}
cout << endl;
} //Z字形编排
int i = , j = ; //变量不能重复
for (int x = ; x < SIZE;x++)
{
for (int y = ; y < SIZE;y++)
{
*(*(a + i) + j) = *(*(matrix + x) + y); if((i==SIZE-||i==)&&j%==) //水平右移
{
j++;
continue;
}
if ((j==||j==SIZE-)&&i%==) //垂直下移
{
i++;
continue;
}
if ((i+j)%==) //右上
{
i--;
j++;
}
else if ((i+j)%==) //左下
{
i++;
j--;
}
}
}
cout << endl << "经过Z字形编排后的矩阵如下:" << endl;
for (int i = ; i < SIZE;i++)
{
for (int j = ; j < SIZE;j++)
{
cout << setw() << *(*(a + i) + j);
}
cout << endl;
}
return ;
}
运行结果:
原始矩阵如下: 经过Z字形编排后的矩阵如下: 请按任意键继续. . .
以前也看过左神的课:里面有矩阵的各种方法遍历,自己也练习过:矩阵的操作
算法之美--2.3.1 Z字形编排问题的更多相关文章
- Z字形编排问题详解(C++)
Z字形编排问题详解(C++): 问题描述:给定一个矩阵matrix,输出矩阵matrix进行Z字形编排后的内容. 原矩阵: 输出形式: 算法分析与详细解答: 要解决这样一个问题,可能一开始无从下手,但 ...
- 算法题--Z字形变换
题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I ...
- 算法题-Z 字形变换
描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R ...
- PHP算法之Z 字形变换
将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I RE T ...
- 算法实战(六)Z 字形变换
一.前言 之前因为第五题最长回文字符串需要使用到dp解法,所以我花了很长的时间来研究dp(因为每天又要上班,加上这段时间事情比较多,所以花了三个星期才搞定),好不容易算入了个门,有兴趣的同学可以看看我 ...
- Java算法练习—— Z 字形变换
题目链接 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...
- Z字形扫描(201412-2)
问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...
- CCF——Z字形扫描问题
试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...
- [CCF] Z字形扫描
CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...
随机推荐
- JAVA-基础(六) Java.serialization 序列化
序 列 化 序列化(serialization)是把一个对象的状态写入一个字节流的过程. Serializable接口 只有一个实现Serializable接口的对象可以被序列化工具存储和恢复.Ser ...
- python - work5 - 类与对象
# -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: work_20181119.py@ide: PyCharm Communit ...
- python 查看异常
接触python 一直觉着编译后报错经常没能捕捉显示,每次也只能从头看到尾 恰好在水木社区中看到关于异常捕捉帖子 方法一:捕获所有异常 try: a=b b=c except Exception,ex ...
- TOJ3031: Multiple bfs
3031: Multiple Time Limit(Common/Java):2000MS/6000MS Memory Limit:65536KByte Total Submit: 60 ...
- POJ 2021 Relative Relatives
Relative Relatives Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3339 Accepted: 146 ...
- [USACO Section 3.2] 01串 Stringsobits (动态规划)
题目链接 Solution 贼有意思的 DP, 也可以用组合数学做. \(f[i][j]\) 代表前 \(i\) 位,有 \(j\) 个 \(1\) 的方案数. 转移方程很简单 : \(f[i][j] ...
- [TJOI2018] Xor 异或 (可持久化Trie,树链剖分)
题目描述 现在有一颗以 1 为根节点的由 n 个节点组成的树,树上每个节点上都有一个权值 \(v_i\).现在有 Q 次操作,操作如下: 1 x y :查询节点 x 的子树中与 y 异或结果的最大值. ...
- ApplicationContext,WebApplicationContext
servletContext 是web应用程序的大环境,用于存储整个web应用程序级别的对象. ApplicationContext,WebApplicationContext 是Spring的Bea ...
- 【webstrom】webstrom打开多个项目,webstrom常用快捷键
1.webstrom打开多个项目 默认情况下一次只能打开一个项目,如果需要打开多个就按照下面的方法 File -> settings -> Directories -> Add Co ...
- hdu 2078(DFS)
Matrix Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 3845 Accepted: 1993 Descriptio ...