史上最难的八个算法优化题, 你能优化到什么程度? 反正我只会把乘除换成移位!

QQ515311445 2016-09-13 04:58:44
for一:

private byte[] cropYUV420SemiPlannerFrame(byte[] input, int iw, int ih, byte[] output, int ow, int oh) {
int iFrameSize = iw * ih;
int oFrameSize = ow * oh;

int i = 0;
for (int row = (ih - oh) / 2; row < oh + (ih - oh) / 2; row++) {
for (int col = (iw - ow) / 2; col < ow + (iw - ow) / 2; col++) {
output[i++] = input[iw * row + col]; // Y
}
}

i = 0;
for (int row = (ih - oh) / 4; row < oh / 2 + (ih - oh) / 4; row++) {
for (int col = (iw - ow) / 4; col < ow / 2 + (iw - ow) / 4; col++) {
output[oFrameSize + 2 * i] = input[iFrameSize + iw * row + 2 * col]; // U
output[oFrameSize + 2 * i + 1] = input[iFrameSize + iw * row + 2 * col + 1]; // V
i++;
}
}

return output;
}


for二:

private byte[] cropYUV420PlannerFrame(byte[] input, int iw, int ih, byte[] output, int ow, int oh) {
int iFrameSize = iw * ih;
int iQFrameSize = iFrameSize / 4;
int oFrameSize = ow * oh;
int oQFrameSize = oFrameSize / 4;

int i = 0;
for (int row = (ih - oh) / 2; row < oh + (ih - oh) / 2; row++) {
for (int col = (iw - ow) / 2; col < ow + (iw - ow) / 2; col++) {
output[i++] = input[iw * row + col]; // Y
}
}

i = 0;
for (int row = (ih - oh) / 4; row < oh / 2 + (ih - oh) / 4; row++) {
for (int col = (iw - ow) / 4; col < ow / 2 + (iw - ow) / 4; col++) {
output[oFrameSize + i] = input[iFrameSize + iw / 2 * row + col]; // U
i++;
}
}

i = 0;
for (int row = (ih - oh) / 4; row < oh / 2 + (ih - oh) / 4; row++) {
for (int col = (iw - ow) / 4; col < ow / 2 + (iw - ow) / 4; col++) {
output[oFrameSize + oQFrameSize + i] = input[iFrameSize + iQFrameSize + iw / 2 * row + col]; // V
i++;
}
}

return output;
}


for三:

private byte[] rotateYUV420SemiPlannerFrame(byte[] input, byte[] output, int width, int height) {
int frameSize = width * height;

int i = 0;
for (int col = 0; col < width; col++) {
for (int row = height - 1; row >= 0; row--) {
output[i++] = input[width * row + col]; // Y
}
}

i = 0;
for (int col = 0; col < width / 2; col++) {
for (int row = height / 2 - 1; row >= 0; row--) {
output[frameSize + i * 2 + 1] = input[frameSize + width * row + col * 2]; // Cb (U)
output[frameSize + i * 2] = input[frameSize + width * row + col * 2 + 1]; // Cr (V)
i++;
}
}

return output;
}


for四:

private byte[] rotateYUV420PlannerFrame(byte[] input, byte[] output, int width, int height) {
int frameSize = width * height;
int qFrameSize = frameSize / 4;

int i = 0;
for (int col = 0; col < width; col++) {
for (int row = height - 1; row >= 0; row--) {
output[i++] = input[width * row + col]; // Y
}
}

i = 0;
for (int col = 0; col < width / 2; col++) {
for (int row = height / 2 - 1; row >= 0; row--) {
output[frameSize + i] = input[frameSize + qFrameSize + width / 2 * row + col]; // Cb (U)
i++;
}
}

i = 0;
for (int col = 0; col < width / 2; col++) {
for (int row = height / 2 - 1; row >= 0; row--) {
output[frameSize + qFrameSize + i] = input[frameSize + width / 2 * row + col]; // Cr (V)
i++;
}
}

return output;
}


for五:

private byte[] unrotateYUV420SemiPlannerFrame(byte[] input, byte[] output, int width, int height) {
int frameSize = width * height;

int i = 0;
for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
output[i++] = input[width * row + col]; // Y
}
}

i = 0;
for (int row = 0; row < height / 2; row++) {
for (int col = 0; col < width / 2; col++) {
output[frameSize + i * 2 + 1] = input[frameSize + width * row + col * 2]; // Cb (U)
output[frameSize + i * 2] = input[frameSize + width * row + col * 2 + 1]; // Cr (V)
i++;
}
}

return output;
}


for六:

private byte[] unrotateYUV420PlannerFrame(byte[] input, byte[] output, int width, int height) {
int frameSize = width * height;
int qFrameSize = frameSize / 4;

int i = 0;
for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
output[i++] = input[width * row + col]; // Y
}
}

i = 0;
for (int row = 0; row < height / 2; row++) {
for (int col = 0; col < width / 2; col++) {
output[frameSize + i] = input[frameSize + qFrameSize + width / 2 * row + col]; // Cb (U)
i++;
}
}

i = 0;
for (int row = 0; row < height / 2; row++) {
for (int col = 0; col < width / 2; col++) {
output[frameSize + qFrameSize + i] = input[frameSize + width / 2 * row + col]; // Cr (V)
i++;
}
}

return output;
}


for七:

private byte[] flipYUV420SemiPlannerFrame(byte[] input, byte[] output, int width, int height) {
int frameSize = width * height;

int i = 0;
for (int row = 0; row < height; row++) {
for (int col = width - 1; col >= 0; col--) {
output[i++] = input[width * row + col]; // Y
}
}

i = 0;
for (int row = 0; row < height / 2; row++) {
for (int col = width / 2 - 1; col >= 0; col--) {
output[frameSize + i * 2] = input[frameSize + width * row + col * 2]; // Cb (U)
output[frameSize + i * 2 + 1] = input[frameSize + width * row + col * 2 + 1]; // Cr (V)
i++;
}
}

return output;
}


for八:

private byte[] flipYUV420PlannerFrame(byte[] input, byte[] output, int width, int height) {
int frameSize = width * height;
int qFrameSize = frameSize / 4;

int i = 0;
for (int row = 0; row < height; row++) {
for (int col = width - 1; col >= 0; col--) {
output[i++] = input[width * row + col]; // Y
}
}

i = 0;
for (int row = 0; row < height / 2; row++) {
for (int col = width / 2 - 1; col >= 0; col--) {
output[frameSize + i] = input[frameSize + width / 2 * row + col]; // Cr (V)
i++;
}
}

i = 0;
for (int row = 0; row < height / 2; row++) {
for (int col = width / 2 - 1; col >= 0; col--) {
output[frameSize + qFrameSize + i] = input[frameSize + qFrameSize + width / 2 * row + col]; // Cb (U)
i++;
}
}

return output;
}
...全文
583 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
QQ515311445 2017-05-31
  • 打赏
  • 举报
回复
引用 7 楼 qinfenshitou 的回复:
看不懂。。。。。。好好学习一下需要了
我就喜欢接分的
勤奋石头 2017-05-30
  • 打赏
  • 举报
回复
看不懂。。。。。。好好学习一下需要了
QQ515311445 2017-05-26
  • 打赏
  • 举报
回复
接分的速来!
QQ515311445 2017-05-26
  • 打赏
  • 举报
回复
竟然这么久了没人灌水, 结贴
Roottan 2016-10-04
  • 打赏
  • 举报
回复
讲题最好有背景,没有的话一般也懒得看
smallcrocodile 2016-09-28
  • 打赏
  • 举报
回复
屎上最油? 不知耶
angel6709 2016-09-22
  • 打赏
  • 举报
回复
QQ515311445 2016-09-14
  • 打赏
  • 举报
回复
神奇啊,竟然连灌水的人都没有,好歹过来接分啊
中文编程系统化教程零基础入门篇学习编程捷径:(不论是正在学习编程的大学生,还是IT人士或者是编程爱好者,在学习编程的过程中用正确的学习方法可以达到事半功倍的效果。对于初学者,可以通过下面的方法学习编程,通过对成百上千个实例练习,则很快会成为编程高手。我们专业从事编程十几年,积累了丰富的编程经验,会陆续制作编程视频供大家学习,中级、高级编程我们会专门制作中高级的系列编程课程,难度逐步加深,想学编程的可以关注我们的系列课程。可以就相关编程问提问。1、【编程工具分为 免费自由版、专业版、企业版。】首先通过免费自由版熟悉基本操作,通过我们提供的实例视频学习编程,先快速入门。2、基本入门后,再学习我们提供的中级编程课程,通过对若干实例的编程练习,基本可以掌握编程思路。3、想继续加深学习的,可以继续学习高级版编程课程,通过对连接数据库等的学习真正开发出实用的商业管理软件或定制开发程序。4、基本掌握了编程思路之后,再学习其他的编程语言或大学里的编程课程则会非常轻松,因为不论是哪个编程语言,最重要的是学习编程思路,而编程思路基本上是相通的。5、学习完PC电脑端编程后,还可以继续学习APP手机软件开发。APP手机软件开发需要有PC电脑上开发基础,操作基本类似。6、编程工具为 搭建之星,这个编程工具的特点:1、安装简单、迅速,纯中文界面,构件丰富,设计过程直观、自由;无需掌握电脑语言,所有编程构件化、命令化、可视化。2、交互式开发,只需要四种类型的“命令”,便可以建立各构件之间的联系;象搭积木一样简单,并可快速的搭建出具有专业水平的软件作品。3、微解释执行,命令解释量小,执行速度快。可以和编译后的可执行文件相媲美。4、提供打包工具,使您即刻将自制软件安装到其它机器上运行。5、自动对开发项目进行加密;使您的项目,在未经授权下,别人无法“浏览、修改”项目的构件关系与搭建方法。课程安排:零基础入门篇-11  系统编程零基础入门篇概述2 新建项目保存项目以及开发工具界面3 添加构件并对构件对齐排列4 构件的属性方法事件概述5 简单加减乘除运算实例6 简单倒计时实例7 点击打开指定网页编程实例8滚动字幕实例9 闪动标签实例10普通按钮位图按钮实例11光线按钮实例12组合按钮实例13分组框单选框复选框构件14列表框组合框构件15时间选择构件16控制面板构件17多页面板构件18进度条构件实例19钟表构件实例20日历构件实例21比较判断构件实例22条件选择构件实例23计数循环构件实例24变量组构件实例25时间计算构件实例26公用事件构件实例27字符串加密构件实例28数字格式构件实例29字符串操作构件实例30事件发生器构件实例31混合编程小实例模拟红绿灯程序32总结 

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧