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字形编排问题的更多相关文章

  1. Z字形编排问题详解(C++)

    Z字形编排问题详解(C++): 问题描述:给定一个矩阵matrix,输出矩阵matrix进行Z字形编排后的内容. 原矩阵: 输出形式: 算法分析与详细解答: 要解决这样一个问题,可能一开始无从下手,但 ...

  2. 算法题--Z字形变换

    题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I ...

  3. 算法题-Z 字形变换

    描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I R ...

  4. PHP算法之Z 字形变换

    将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L C I RE T ...

  5. 算法实战(六)Z 字形变换

    一.前言 之前因为第五题最长回文字符串需要使用到dp解法,所以我花了很长的时间来研究dp(因为每天又要上班,加上这段时间事情比较多,所以花了三个星期才搞定),好不容易算入了个门,有兴趣的同学可以看看我 ...

  6. Java算法练习—— Z 字形变换

    题目链接 题目描述 将一个给定字符串根据给定的行数,以从上往下.从左到右进行 Z 字形排列. 比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时,排列如下: L ...

  7. Z字形扫描(201412-2)

    问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z字形扫描的过程如下图所示: 对于下面的4×4的矩阵, 1 5 3 9 3 7 5 ...

  8. CCF——Z字形扫描问题

    试题编号: 201412-2 试题名称: Z字形扫描 时间限制: 2.0s 内存限制: 256.0MB 问题描述: 问题描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag ...

  9. [CCF] Z字形扫描

    CCF Z字形扫描 感觉和LeetCode中的ZigZag还是有一些不一样的. 题目描述 在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan).给定一个n×n的矩阵,Z ...

随机推荐

  1. php msql 表单

    http://www.cnblogs.com/webers/p/3849707.html

  2. 03009_HttpServletResponse

    1.HttpServletResponse概述 (1)我们在创建Servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的request和 ...

  3. const用法归纳总结 C++

    非常好的一篇分析const的总结归纳, 在此谢谢原作者:http://blog.csdn.net/zcf1002797280/article/details/7816977 在普通的非 const成员 ...

  4. Selenium WebDriver-操作键盘事件

    # 注意: !!!操作操作系统的按键,需要先装pywin32,然后通过交互模式import win32api和import win32con判断是否安装成功,需要重启下cmd进入交互模式# 下载链接: ...

  5. python - 路径处理 和 模块导入

    # -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_模块导入.py@ide: PyCharm Community E ...

  6. 《机器学习实战》笔记——AdaBoost

    笔记见备注 # _*_ coding:utf-8 _*_ from numpy import * # 简单数据集 def loadSimpData(): datMat = matrix([[1., 2 ...

  7. install cinnamon on ubuntu 14.04

    emotion: I feel not comfortable with ubuntu 14.04 default desktop unity,i still look for a alternati ...

  8. 【bzoj4260】Codechef REBXOR Trie树

    题目描述 输入 输入数据的第一行包含一个整数N,表示数组中的元素个数. 第二行包含N个整数A1,A2,…,AN. 输出 输出一行包含给定表达式可能的最大值. 样例输入 5 1 2 3 1 2 样例输出 ...

  9. Java2WSDL 和 WSDL2Java(Axis)

    原文地址:https://www.ibm.com/developerworks/cn/webservices/ws-axisfaq/ 生成或取得WSDL文件 生成客户端或服务端代码 执行WSDL2Ja ...

  10. 标准C程序设计七---102

    Linux应用             编程深入            语言编程 标准C程序设计七---经典C11程序设计    以下内容为阅读:    <标准C程序设计>(第7版) 作者 ...