LabelMe安装 参考
Ubuntu 1 2 3 4 5 6 7 8 9 # Ubuntu 14.04 / Ubuntu 16.04
# Python2
# sudo apt-get install python-qt4 # PyQt4
sudo apt-get install python-pyqt5 # PyQt5
sudo pip install labelme
# Python3
sudo apt-get install python3-pyqt5 # PyQt5
sudo pip3 install labelme
基本操作 1 2 3 4 5 6 7 8 9 10 labelme # 打开labelme软件
labelme apc2016_obj3.
如何在本地创建一个本地仓库并推送到github 1 2 3 4 5 6 7 8 git init #通过git init命令把这个目录变成Git可以管理的仓库
git add *** #用命令git add告诉Git,把文件添加到仓库,可以多次add不同的文件
(git add .)#添加所有文件
git commit -m "***" #用命令git commit告诉Git,把文件提交到仓库,简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。commit可以一次提交很多文件.
4. 登陆GitHub,创建一个新的仓库,(选择建立readme文件)
5. git remote add origin git@github.com:shilongshen/learngit.git #将本地库与远程库关联,其中learngit为仓库名
6. git pull --rebase origin master#将github中的README.md文件合并到本地代码目录中
7. git push -u origin master#把本地仓库的内容推送到GitHub仓库
将修改提交到仓库 1 2 3 4 5 6 7 8 9 git add #(将文件提交到缓冲区)
#几种git add 命令:
git add -A #保存所有的修改
git add .
B树 2-3树和2-3-4树 多路查找树,其每个节点的孩子数可以多于两个,且每一个结点处可以存储多个元素,所有的元素之间存在某种特定的排序关系。
首先聊一聊2-3树: 每个节点具有两个孩子(2结点)或 三个孩子(3结点)
2结点具有一个元素和两个孩子(或没有孩子),左子树元素小于该元素,右子树元素大于该元素。这个2节点要么没有孩子,要有就有两个,不能只有一个孩子。
3结点具有两个元素和三个孩子(或没有孩子),左子树元素小于较小元素,右子树元素大于较大元素,中子树包含介于两元素之间的元素。这个3节点要么没有孩子,要有就有3个。
2-3树中的所有叶子都在一个层次上。
同理,2-3-4树是2-3树的拓展,包括了4结点的使用。一个4结点包含了小中大三个元素和四个孩子(或没有孩子)
而2-3树和2-3-4树都是B树的特例
2-3树的插入和删除 再聊一聊2-3树的插入和删除操作 插入操作:与二叉排序树相同,插入操作一定是发生在叶子结点的。
对于空树,直接插入一个2结点
对于2结点的插入:直接将2结点转换为3结点即可
对于3结点的插入一个新元素:因为3结点本身已经是2-3树结点的最大容量,因此需要将其拆分,将树中两元素或插入元素的三者中选择其一向上移动一层。
例如插入元素5,需要将6向上移动一层
删除操作:
所删除元素位于一个3结点的叶子节点上,直接将该节点删除
所删除的元素位于一个2结点的叶子节点上,分为4种情况
此节点的父结点也是2结点,且拥有一个3结点的右孩子 例如删除结点1,只需要进行左旋,让6成为父节点,4成为6的左孩子,7为6的右孩子
此节点的父结点也是2结点,且拥有一个2结点的孩子 此节点的父结点是3结点
当前树是一颗满二叉树
所删除元素位于非叶子结点。此时通常是将树按中序遍历后得到此元素的前驱或后继元素,考虑让他们来补位即可 描述一颗B树时需要指定它的阶数
每一个结点都可以存储多个数据,我们可以进一步的将其细分为
B+树 B+树的优点 单一节点存储更多的元素,使得查询的IO次数更少。
二分查找思路1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 public int Search(int[] nums,int target){
int left=0;
int right=nums.length-1;
while(left<=right){
int mid=left+(right-left)/2;
if(nums[mid]==target){
return nums[mid];
}
else if(nums[mid]>target){
right=mid-1;
}
else{
left=mid+1;
}
}
return -1;
}
二分查找的思路2 排除法:考虑中间元素nums[mid] 在什么情况下不是目标元素 思路:将待搜索区间分为2个部分,一部分一定不存在目标元素,另一部分可能存在目标元素 写二分查找的一般步骤:
将循环条件设置为while(left<right) 写if和else语句的时候,思考nums[i]满足什么性质时,nums[mid]不是目标元素,接着判断mid的左边有没有可能存在目标元素,mid的右边有没有可能存在目标元素。 根据“边界收缩行为”修改中间数的行为 int mid = left +(right - left)/2 “/” 是整数除法,默认的取整行为是向下取整,这会带来一个问题:int mid = left +(right - left)/2 永远取不到右边界right,对应的是mid被分到了左边区间。在面对left=mid和right=mid-1这种边界收缩时,就有可能产生死循环。 退出循环后,看是否需要对nums[left]是否是目标元素再做一次检查。 参考 链接
注意,此处是会议论文模板的使用(期刊模板类似);解决的问题为外部bib文件的引用
模板下载地址:链接或链接 注意此时参考文献只能够在tex文件内部编辑,比较麻烦。如果我们已经有了外部的bib文件,例如
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @inproceedings{goodfellow2014generative,
title={Generative Adversarial Nets},
author={Goodfellow, Ian and Pouget-Abadie, Jean and Mirza, Mehdi and Xu, Bing and Warde-Farley, David and Ozair, Sherjil and Courville, Aaron and Bengio, Yoshua},
booktitle={Advances in neural information processing systems},
pages={2672--2680},
year={2014},
}
@inproceedings{men2020controllable,
title={Controllable Person Image Synthesis with Attribute-Decomposed GAN},
author={Men, Yifang and Mao, Yiming and Jiang, Yuning and Ma, Wei-Ying and Lian, Zhouhui},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={5084--5093},
year={2020}
}
我们可以直接通过外部bib文件的引用的方式导入已有的参考文献。首先下载链接,打开bibtex文件夹,这里面包含了ieee的参考文献格式定义。将IEEEtran.
执行时间: 时间复杂度
内存消耗:空间复杂度
一般更关注于时间复杂度,(所以常用空间换时间)
时间复杂度 大$O$记号
$O(g(N))$:代表了一个复杂的表达式,是关于输入规模$N$的函数的上界
$g(N)$:关于输入规模$N$的简单表达式,$N$可以理解为输入数据的个数
随着输入规模的增加,程序的运行时间将以什么样的速度增加。
时间复杂度的计算规则 如果一个算法执行的操作数于输入数据的规模$N$的表达式为多项式: $$ aN^2+bN+c $$
时间复杂度忽略加法常数项 只保留最高次幂项 并且最高次幂项的乘法系数视为1 所以上式可看为 $$ N^2 $$
所以时间复杂度就为$O(N^2)$
注意:时间复杂度只有当输入规模特别大时才有意义
时间复杂度的数学表达式 $O(g(n))={f(n):存在正常量c和n_0,使得对所有n\geq n_0,有0 \leq f(n) \leq cg(n)}$
$O(g(n))$是$f(n)$的上界,等价于:$\lim\limits_{n \rightarrow \infty }\frac{f(n)}{g(n)} <= c$
空间复杂度 空间复杂度表达了在处理过程中,使用的额外空间,也是用大$O$记号。
参考 链接