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. 程序员是天生的软件UI设计师

    一个软件项目,谁才是软件开发的主体,是软件UI设计师?还是程序员? 这还用问吗?当然是程序员拉.引用以下alienbat知友的一段评论:对于软件开发而言,码农的工作是必需的.设计师的工作是可选的. 举 ...

  2. python学习-- Django model -class 主键自增问题

    转自:http://blog.csdn.net/mapoor/article/details/8609660 prize_id = models.IntegerField(primary_key=Tr ...

  3. 1章 perl入门

    1.标量数据    单变量    数字和字符串两种情况 2.所有数字的内部格式都相同.浮点型   perl中没有应对整数值得运算   . 3.浮点数直接量 数字e表示10的次方标示符 例子:-6.5e ...

  4. Django创建并连接数据库(实现增删改查)--第二版

    注意点一: url里面的地址,不只是html页面,准确说是views视图里面对应的函数方法 <!DOCTYPE html> <html lang="en"> ...

  5. Codeforces Round #470 (rated, Div. 2, based on VK Cup 2018 Round 1)

    A. Protect Sheep time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  6. [转]netstat -tnl 列出监听中的连接,查看端口是否开启

    任何网络服务的后台进程都会打开一个端口,用于监听接入的请求. 这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来. 参数 tnl, 现在我们可以看到处于监听状态的 TCP 端口和 ...

  7. solr 创建core

    mkdir /var/solr/data/CORE_NAME cp -r /opt/solr/server/solr/configsets/basic_configs/* /var/solr/data ...

  8. Spring 4.3.11.RELEASE文档阅读(二):Core Technologies_IOC

    在看这部分内容的时候,想了一些问题: 容器: 1,什么是容器 用来包装或装载物品的贮存器 2,容器能做什么 包装或装载物品 3,为什么需要容器 为什么要使用集装箱?如果没有容器会是什么样? 4,常见的 ...

  9. ABP数据库的迁移

    添加表,一(Test)对多(Test1)关系 Test using Abp.Domain.Entities.Auditing; using System; using System.Collectio ...

  10. BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案

    听说是BC原题. 好题,二分答案变成01序列,就可以方便的用线段树维护了. 然后就是区间查询和覆盖了. #include <map> #include <cmath> #inc ...