Algorithm:
Leetcode
Flipping an Image
题目原意:对一个二维数组,首先对每行的元素进行顺序反转,然后对每个元素取相反元素。
思路:
简单题,利用两个for循环,内层循环将每行的元素从后往前访问,将每个元素与1进行异或操作后,存放到一个新的向量中,最后返回这个新向量。
代码:
class Solution {
public:
vector<vector<int>> flipAndInvertImage(vector<vector<int>>& A) {
int temp;
int i,j;
vector<vector<int>> ans;
vector<int> a;
for(i=0;i<A.size();i++)
{
a.clear();
for(j=A[i].size()-1;j>=0;j--){
a.push_back(1^A[i][j]);
}
ans.push_back(a);
}
return ans;
}
};
Review:
本周我阅读了一篇关于DotA2 获胜方预测的英文论文,题目叫做“DOTA 2 Win Prediction”,作者是Nicholas Kinkade和Kyung yul Kevin Lim,原文链接:http://jmcauley.ucsd.edu/cse255/projects/fa15/018.pdf
在该文章中,作者提出了两种预测方法:第一种根据历史的匹配数据进行预测。第二种只根据选择数据进行预测。
首先是数据收集,作者从Stream Web API上选取了,并从中提取下列信息:获胜方、时长、每分钟经验、每分钟金钱、击杀、助攻以及死亡。
目前,机器学习在DotA2上有两个应用:英雄推荐以及获胜预测。而阵容推荐往往是基于各个阵容的获胜概率进行推荐的,因此,第一个应用建立在第二个应用之上,这两个问题可以归结为:如果进行获胜预测。
筛选条件:对于对阵情况,部分对局存在一些情况。在预测的时候予以删除。
其次是探索分析,作者分别考虑了每分钟金钱、经验,击杀比,游戏时间,英雄选取比例,各个英雄获胜比例等因素。最后发现各个英雄获胜比例并不相同。
然后是特征选择,选择每分钟金钱、经验、击杀以及时间。
接着是建立模型,将不同的特征进行组合,分别利用回归和随机森林进行实验,
最后是实验结果,实验能够达到73%的预测精度。
Tips:
在本科的时候,刷过一些网上的OJ题目,这些OJ题目都会有案例输入和期望输出。在编完相应的代码之后,往往需要对程序进行检验。而一种很直接的检验程序是否正确方法就是输入样例。当样例的输入数字、符号不多的时候,一个一个手动输入还能接受。但是当样例的输入数字、符号很多时,人工一个一个输入就变得很繁琐。一种更简便的方法是使用输入流的重定向功能。
只需在代码最前面加上这么几句话:
freopen(“data.txt”,”r”,stdin);
其中参数一是输入数据所在的文件名,参数二“r”表示为读入方式,参数三stdin表示标准输入。因此,只需要将案例保存到data.txt中,就可以实现重定向读入了。再也不用每次调试都重新输入了,节省了许多时间,而输出到文件可以这么写:
freopen("r.txt","w",stdout);
Share:
目前,Python这么流行,有一个原因就是有许多开发者提供了python相关的库(或者叫包/工具),这些库为我们做好了许多更底层的工作,我们只需要导入这些库,调用库里面的函数就可以完成我们想要的功能,而不用去关心底层的实现。比如,在我大三的时候,我选修了数字图像处理这门课,我们需要利用机械臂抓取物体。机械臂的核心控制板是树莓派,里面默认的编程语言有python,控制机械臂转动是用舵机实现的。上过嵌入式、电子电路等课程的同学都知道,要想控制舵机转动,必须使用PWM信号。因此,如果我们要想在数字信号层面控制舵机,必须不停地发送PWM信号,即不断拉高、拉低信号。但是因为有python的gpio库,其对底层的实现进行了封装,使得我们在对引脚进行初始化操作后,只需两个函数,就可以改变占空比。
p = GPIO.PWM(channel, frequency)
p.ChangeDutyCycle(dc) # where 0.0 <= dc <= 100.0