<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_35297945的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_35297945</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_35297945]]></copyright><item><title><![CDATA[在linux下安装OpenMVG和OpenMVS]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/118929180</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/118929180</guid><author>qq_35297945</author><pubDate>Thu, 22 Jul 2021 12:07:19 +0800</pubDate><description><![CDATA[前言

本文章主要参考https://www.it610.com/article/1282324582472105984.htm所写，主要流程与该文章相同，本文以自己安装流程在其中添加了一些小细节供读者参考。

本文章主要针对于新系统和小白安装openmvg和openmvs，大佬请随意。

我采用的系统是，连接云服务器的软件是xshell，连接云服务器软件的不同并不会影响整个安装过程，可能有些linux指令不同，我会在指令前表明指令的用途，小白可自行百度在自己连接云服务器软件上如何实现该功能。

作为一个小]]></description><category></category></item><item><title><![CDATA[Linux--基础指令-打包压缩指令]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/114379443</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/114379443</guid><author>qq_35297945</author><pubDate>Fri, 05 Mar 2021 00:01:55 +0800</pubDate><description><![CDATA[1 文件压缩
  文件压缩理解的简单一些的话，就是按照指定的一张表，将相同的数据以特殊数据进行替换，让内容变少，解压缩就是替换回来，文件压缩存在多种不同算法，压缩比率也不相同。
  常见的压缩方式有：zip、gzip和bzip2。
2 zip/unzip指令
语法：zip 压缩文件.zip 目录或文件
功能：将目录或文件压缩成.zip格式
常用选项：

-r 递归处理，将指定目录下的所有文件和子目录一并处理

例：将下图中abc目录和test.txt文件打包并解包
压缩：

解压缩：

3 gzip/gun]]></description><category></category></item><item><title><![CDATA[Linux--基础指令-文件相关指令]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/114369371</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/114369371</guid><author>qq_35297945</author><pubDate>Thu, 04 Mar 2021 22:10:44 +0800</pubDate><description><![CDATA[1 基础知识
1.1 文件的时间属性
文件的时间属性有三种：
  最后一次访问时间（Access）；
  最后一次修改时间（Modify）；
  最后一次状态改变时间（Change）；
其中，最后一次访问时间和修改时间可手动设定时间，而最后一次状态改变时间只能记录当前时间。
2 touch指令
语法：touch 【选项】 文件
功能：touch命令参数可更改文档或目录的日期时间，包括存取时间和更改时间，或者新建一个不存在的文件
常用选项：

-d 使用指定的日期时间，而非现在的时间
-a 或–time=at]]></description><category></category></item><item><title><![CDATA[Linux--基础指令-目录相关指令]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/114293405</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/114293405</guid><author>qq_35297945</author><pubDate>Thu, 04 Mar 2021 15:21:07 +0800</pubDate><description><![CDATA[基础指令的组成部分：
  命令名称     [操作选项]     [操作对象]

每一个命令的功能可能非常丰富，但不是每一个功能都要直接使用，而是特定的情况下才会使用，因此有了操作选项。

1 基础知识
1.1 Linux下的目录结构
Linux系统中，磁盘上的文件和目录被组成一棵目录树，每个节点都是目录或文件，下图为作者电脑的目录树的一部分：

目录：就是我们常说的文件夹；
绝对路径：以根目录作为起始的路径，如：/home/dev/mystudy；
相对路径：以当前目录作为起始的路径，随着当前所在目录的不]]></description><category></category></item><item><title><![CDATA[数据结构--排序算法复杂度及稳定性分析]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/114108888</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/114108888</guid><author>qq_35297945</author><pubDate>Fri, 26 Feb 2021 00:25:01 +0800</pubDate><description><![CDATA[1 验证各种排序算法的时间数量级
void testOP() {
	srand(time(0));
	const int N = 100000;
	int* a1 = (int*)malloc(sizeof(int) * N);
	int* a2 = (int*)malloc(sizeof(int) * N);
	int* a3 = (int*)malloc(sizeof(int) * N);
	int* a4 = (int*)malloc(sizeof(int) * N);
	int* a5 = (int]]></description><category></category></item><item><title><![CDATA[数据结构--计数排序（鸽巢原理）]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/114107916</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/114107916</guid><author>qq_35297945</author><pubDate>Thu, 25 Feb 2021 22:47:38 +0800</pubDate><description><![CDATA[1 基本思想
计数排序又称为鸽巢原理，是对哈希直接定址法的变形应用。操作步骤：

统计相同元素出现次数
根据统计的结果将序列回收到原来的序列中

2 算法示意图

3 程序代码
#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;string.h&gt;

void countSort(int* arr, int n) {
	int max , min;
	max = min = arr[0];
	//找到最大值和最小值
	for (in]]></description><category></category></item><item><title><![CDATA[数据结构--归并排序]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/114099760</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/114099760</guid><author>qq_35297945</author><pubDate>Thu, 25 Feb 2021 22:16:08 +0800</pubDate><description><![CDATA[1 基本思想
归并排序是建立在归并操作上的一种有效的排序算法，该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并，得到完全有序的序列：即先使每个子序列有序，在使子序列段间有序。若将两个有序表合并称一个有序表，称为二路归并。
2 算法示意图

3 递归实现归并排序
#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;string.h&gt;
//tmp辅助空间  arr待排序数组
void merge(int* arr, int ]]></description><category></category></item><item><title><![CDATA[数据结构--冒泡排序和快速排序]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/114026501</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/114026501</guid><author>qq_35297945</author><pubDate>Thu, 25 Feb 2021 18:41:30 +0800</pubDate><description><![CDATA[1 交换排序
根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置，交换排序的特点是：将键值较大的记录向序列的尾部移动，键值较小的记录向序列的前部移动。
2 冒泡排序
2.1 基本思想
在区间[0,n-1]中，相邻元素进行比较，大的元素向后移动，并减小区间，在[0,n-2]中重复上述操作，直至不再有元素的移动或者区间大小为1时排序完成。
2.2 算法示意图

2.3 程序代码
#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;

void swap(i]]></description><category></category></item><item><title><![CDATA[数据结构--直接选择排序和堆排序]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113921945</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113921945</guid><author>qq_35297945</author><pubDate>Sun, 21 Feb 2021 23:19:06 +0800</pubDate><description><![CDATA[1 选择排序
2 直接选择排序
2.1 基本思想
2.2 算法示意图
2.3 程序代码
2.4 验证代码
2.5 直接选择排序特性
3 堆排序
2.1 基本思想
2.2 算法示意图
2.3 程序代码
2.4 验证代码
2.5 堆排序特性

]]></description><category></category></item><item><title><![CDATA[数据结构--直接插入排序与希尔排序]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113918754</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113918754</guid><author>qq_35297945</author><pubDate>Sun, 21 Feb 2021 18:55:05 +0800</pubDate><description><![CDATA[1 插入排序
直接插入排序是一种简单的插入排序法，其基本思想是：把待排序的记录按其关键字码值的大小逐个插入到一个已经排好序的有序序列中，直到所有的记录插入完为止，得到一个新的有序序列。
2 直接插入排序
2.1 基本思想
当插入第i(i&gt;=1)i(i&gt;=1)i(i&gt;=1)个元素时，前面的array[0]、array[1]、…、array[i-1]已经排好序，此时用array[i]的排序码与array[i-1]、array[i-2]、…的排序码顺序进行比较，找到插入位置即将array[i]插]]></description><category></category></item><item><title><![CDATA[数据结构--排序简介]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113917987</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113917987</guid><author>qq_35297945</author><pubDate>Sun, 21 Feb 2021 15:03:10 +0800</pubDate><description><![CDATA[1 排序的概念

排序：所谓排序，就是使一串记录，按照其中的某个或某些关键字的大小，递增或者递减的排列起来的操作。
稳定性：假定在待排序的记录序列中，存在多个具有相同的关键字的记录，若经过排序，这些记录的相对次序保持不变，即在原序列中,r[i]=r[j]r[i] = r[j]r[i]=r[j],且r[i]r[i]r[i]在r[j]r[j]r[j]之前，而在排序后的序列中，r[i]r[i]r[i]仍在r[j]r[j]r[j]之前，则称这些排序算法是稳定的，否则称为不稳定的。
内部排序：数据元素全部放在内存中的]]></description><category></category></item><item><title><![CDATA[数据结构--递归、非递归实现二叉树的后序遍历]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113901665</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113901665</guid><author>qq_35297945</author><pubDate>Sun, 21 Feb 2021 00:21:23 +0800</pubDate><description><![CDATA[1 后序遍历
完成int* preorderTraversal(struct TreeNode* root, int* returnSize)函数，使其可以实现前序遍历的功能
题目链接：https://leetcode-cn.com/problems/binary-tree-postorder-traversal/
1.1 递归实现
  int getSize(struct TreeNode* root){
    if(root == NULL)
        return 0 ;
    return]]></description><category></category></item><item><title><![CDATA[数据结构--递归、非递归实现二叉树的中序遍历]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113890151</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113890151</guid><author>qq_35297945</author><pubDate>Sat, 20 Feb 2021 19:01:26 +0800</pubDate><description><![CDATA[1 中序遍历
完成int* preorderTraversal(struct TreeNode* root, int* returnSize)函数，使其可以实现前序遍历的功能
题目链接：https://leetcode-cn.com/problems/binary-tree-inorder-traversal/
1.1 递归实现
 int getSize(struct TreeNode* root){
    if(root == NULL)
        return 0 ;
    return ge]]></description><category></category></item><item><title><![CDATA[数据结构--递归、非递归实现二叉树的前序遍历]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113888969</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113888969</guid><author>qq_35297945</author><pubDate>Sat, 20 Feb 2021 18:46:58 +0800</pubDate><description><![CDATA[1 前序遍历
完成int* preorderTraversal(struct TreeNode* root, int* returnSize)函数，使其可以实现前序遍历的功能
1.1 递归实现
struct TreeNode {
	int val;
	struct TreeNode* left;
	struct TreeNode* right;
};

int getSize(struct TreeNode* root){
    if(root == NULL)
        return 0 ;
  ]]></description><category></category></item><item><title><![CDATA[数据结构--二叉树OJ习题2]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113874415</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113874415</guid><author>qq_35297945</author><pubDate>Sat, 20 Feb 2021 17:23:55 +0800</pubDate><description><![CDATA[1 单值二叉树
1.1 题目介绍
1.2 题目分析
1.2.1 基本思路
1.2.2 关键变量
1.3 程序代码
1.4 运行结果

]]></description><category></category></item><item><title><![CDATA[数据结构--二叉树OJ习题1]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113870383</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113870383</guid><author>qq_35297945</author><pubDate>Sat, 20 Feb 2021 00:01:46 +0800</pubDate><description><![CDATA[1 单值二叉树
1.1 题目介绍
如果二叉树每个节点都具有相同的值，那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时，才返回 true；否则返回 false。
示例 1：


输入：[1,1,1,1,1,null,1]
输出：true

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/univalued-binary-tree
1.2 题目分析
使用递归的思路来进行解题：
定义新的函数：bool _isUnivalTree(struct Tree]]></description><category></category></item><item><title><![CDATA[数据结构--二叉树的二叉链表实现]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113099429</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113099429</guid><author>qq_35297945</author><pubDate>Fri, 19 Feb 2021 16:36:21 +0800</pubDate><description><![CDATA[1 二叉树的二叉链表示意图
  二叉链表的每个结点由三个域组成:数据域，左指针域和右指针域。左右指针分别用来保存左右孩子结点的存储地址。

2 二叉链表实现二叉树
2.1 头文件及其定义

]]></description><category></category></item><item><title><![CDATA[数据结构--二叉树链式结构的遍历]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113095607</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113095607</guid><author>qq_35297945</author><pubDate>Sun, 24 Jan 2021 22:41:35 +0800</pubDate><description><![CDATA[1 二叉树的链式结构
  二叉树的链式存储结构是指，用链表来表示一棵二叉树，即用链表来指示元素的逻辑关系。
  链式结构可以分为二叉链表和三叉链表，我们使用最多的是二叉链表。
  二叉链表的每个结点由三个域组成:数据域，左指针域和右指针域。左右指针分别用来保存左右孩子结点的存储地址。


2 二叉树链式结构的遍历
 所谓遍历是指沿着某条搜索路线，依次对树中每个结点均做一次且仅作一次访问。访问结点所做的操作依赖于具体的应用问题。遍历是二叉树上最重要的运算之一，是二叉树上进行其他运算之基础。
2.1 前序遍历：]]></description><category></category></item><item><title><![CDATA[数据结构--堆排序]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113093244</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113093244</guid><author>qq_35297945</author><pubDate>Sun, 24 Jan 2021 17:26:00 +0800</pubDate><description><![CDATA[1 堆排序的概述
利用堆的性质，我们可以实现对数组的排序。大小为n的数组看作一棵完全二叉树，将其创建成大根堆，交换堆顶与堆的最后一个元素，之后将前n-1个数据看作一棵完全二叉树，再次调整成堆，以此类推，直至只剩一个元素，这时已将数组排序完成。
示意图如下：


2 堆排序的算法
#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;

typedef int HPDataType;
/*实现数组中两个位置值的交换*/
void Swap(HPDataType* ar]]></description><category></category></item><item><title><![CDATA[数据结构--堆的概念及实现]]></title><link>https://blog.youkuaiyun.com/qq_35297945/article/details/113063094</link><guid>https://blog.youkuaiyun.com/qq_35297945/article/details/113063094</guid><author>qq_35297945</author><pubDate>Sun, 24 Jan 2021 16:48:37 +0800</pubDate><description><![CDATA[1 堆的概念及结构
如果有一个关键码的集合K={k0,k1,k2,...,kn−1}K = \{  k_0 , k_1 , k_2,...,k_{n-1} \}K={k0​,k1​,k2​,...,kn−1​},把它的所有元素按照完全二叉树的顺序存储方式存储在一个一维数组中，并满足Ki&lt;=K2i+1且Ki&lt;=K2i+2，i=0，1，2......K_i &lt;= K_{2i+1}且K_i &lt;= K_{2i+2}，i=0，1，2......Ki​&lt;=K2i+1​且Ki​&lt;=K2]]></description><category></category></item></channel></rss>