遍历

2019年11月20日开发手记

只愿长相守 提交于 2019-12-05 03:09:47
两种运动检测算法的介绍: 帧差法: 帧差法是目前运动目标检测中最常用的算法。帧差法依据的原则是:当视频中存在移动物体的时候,相邻帧(或相邻三帧)之间在灰度上会有差别,求取两帧图像灰度差的绝对值,则静止的物体在差值图像上表现出来全是0,而移动物体特别是移动物体的轮廓处由于存在灰度变化为非0,当绝对值超过一定阈值时,即可判断为运动目标,从而实现目标的检测功能。 二维频域运动目标检测: 通过对动态图像的行列分解, 将三维频域内的运动检测问题转化到两组二维频域内进行, 从而降低了滤波器设计的难度。给出了一种提取主运动能量的自适应滤波算法, 通过剔除背景和噪声的频率成分, 有效地检测出运动目标。 复杂度分析: 针对帧差法进行分析,代码复杂度主要集中在absdiff与findContours部分,其中absdiff的迭代次数为2*500*500=50000次,时间为88.46ms(取两百帧计算平均的时间) 针对二维频域运动目标检测算法,这里有两个代码版本: 针对py-new-fuliye.py,代码的复杂度主要集中在两个部分:傅里叶变换以及遍历,在py-new-fuliye.py中,共使用了两次傅里叶变换与两次遍历,遍历的迭代次数次数为2*50*30=300次,时间为:54.175ms 针对pepoplefft.py(改进版)进行分析,使用了两次傅里叶变换(一次正一次逆),进行了一次嵌套遍历

js数组遍历和对象遍历

我是研究僧i 提交于 2019-12-05 03:03:41
js数组遍历和对象遍历 针对js各种遍历作一个总结分析,从类型用处:分数组遍历和对象遍历;还有性能,优缺点等。 JS数组遍历: 1,普通for循环,经常用的数组遍历 var arr = [1,2,0,3,9]; for ( var i = 0; i <arr.length; i++){ console.log(arr[i]); } 2,优化版for循环:使用变量,将长度缓存起来,避免重复获取长度,数组很大时优化效果明显 for(var j = 0,len = arr.length; j < len; j++){ console.log(arr[j]); } 3,forEach,ES5推出的,数组自带的循环,主要功能是遍历数组,实际性能比for还弱 arr.forEach(function(value,i){   console.log('forEach遍历:'+i+'--'+value); }) forEach这种方法也有一个小缺陷:你不能使用 break 语句中断循环,也不能使用 return 语句返回到外层函数。 4,map遍历,map即是 “映射”的意思 用法与 forEach 相似 arr.map(function(value,index){ console.log('map遍历:'+index+'--'+value); }); map遍历支持使用return语句

jQuery后续和 前端框架Bootstrap

心不动则不痛 提交于 2019-12-05 02:55:06
目录 一、jQuery后续 1. 动画效果 (1)自定义点赞动画实例 2. jQuery的自带方法 (1) each (类似for循环) (2) data() (存放隐形的数据) 二、前端框架之Bootstrap 1. CDN 2. Bootstrap中常用的全局CSS样式 (1)栅格系统 (2)表格 (3)表单 (4)按钮 3. Bootstrap中常用的组件 (1)字体图标(也可通过其他网站获取图标) (2)导航条 (3)巨幕 (4)面板 一、jQuery后续 1. 动画效果 // 基本 show([s,[e],[fn]]) hide([s,[e],[fn]]) toggle([s],[e],[fn]) // 滑动 slideDown([s],[e],[fn]) slideUp([s,[e],[fn]]) slideToggle([s],[e],[fn]) // 淡入淡出 fadeIn([s],[e],[fn]) fadeOut([s],[e],[fn]) fadeTo([[s],o,[e],[fn]]) fadeToggle([s,[e],[fn]]) // 自定义(了解即可) animate(p,[s],[e],[fn]) (1)自定义点赞动画实例 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8

1254. 统计封闭岛屿的数目

一曲冷凌霜 提交于 2019-12-05 02:31:14
题目:   有一个二维矩阵 grid ,每个位置要么是陆地(记号为 0 )要么是水域(记号为 1 )。   我们从一块陆地出发,每次可以往上下左右 4 个方向相邻区域走,能走到的所有陆地区域,我们将其称为一座「岛屿」。   如果一座岛屿 完全 由水域包围,即陆地边缘上下左右所有相邻区域都是水域,那么我们将其称为 「封闭岛屿」。   请返回封闭岛屿的数目。          输入 :grid = [[1,1,1,1,1,1,1,0],[1,0,0,0,0,1,1,0],[1,0,1,0,1,1,1,0],[1,0,0,0,0,1,0,1],[1,1,1,1,1,1,1,0]]    输出 :2    解释: 灰色区域的岛屿是封闭岛屿,因为这座岛屿完全被水域包围(即被 1 区域包围)。 分析:   1.对于边界而言,即使其为陆地,也至少存在一个变不能临近水域,所以不可能构成孤岛;   2.对于边界上的陆地而言,其相邻的陆地,肯定也构不成孤岛,即所能到达的陆地,均不可以。   3.对于剩余区域的陆地X,其所能到达的陆地Y,能够和X构成同一片岛屿。 方案:(参考别人的 https://leetcode-cn.com/problems/number-of-closed-islands/solution/yi-ti-kan-tou-dfs-he-dfs-by-xiao-xiao-suan-fa

树的前世今生之数据结构遍历二叉搜索树平衡二叉树哈夫曼树哈夫曼编码堆的路径集合的并查按秩归并与路径压缩

百般思念 提交于 2019-12-05 02:11:11
正在更新~~~~ 在介绍树的概念之前,先来看一下树的四种遍历方式以此更直观了解树 void InorderTraversal( BinTree BT ) { if( BT ) { InorderTraversal( BT->Left ); /* 此处假设对BT结点的访问就是打印数据 */ printf("%d ", BT->Data); /* 假设数据为整型 */ InorderTraversal( BT->Right ); } }//中序遍历 void PreorderTraversal( BinTree BT ) { if( BT ) { printf("%d ", BT->Data ); PreorderTraversal( BT->Left ); PreorderTraversal( BT->Right ); } }//先序遍历 void PostorderTraversal( BinTree BT ) { if( BT ) { PostorderTraversal( BT->Left ); PostorderTraversal( BT->Right ); printf("%d ", BT->Data); } }//后序遍历 void LevelorderTraversal ( BinTree BT ) { Queue Q; BinTree T; if ( !BT )

java enum的用法详解

a 夏天 提交于 2019-12-05 02:02:18
java enum的用法详解 Java Enum原理 public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE }; 实际上,这个声明定义的类型是一个类,它刚好有四个实例,在此尽量不要构造新对象。 因此,在比较两个枚举类型的值时,永远不需要调用equals方法,而直接使用"=="就可以了。(equals()方法也是直接使用==, 两者是一样的效果) Java Enum类型的语法结构尽管和java类的语法不一样,应该说差别比较大。但是经过编译器编译之后产生的是一个class文件。该class文件经过反编译可以看到实际上是生成了一个类,该类继承了java.lang.Enum<E>。 例如: public enum WeekDay { Mon("Monday"), Tue("Tuesday"), Wed("Wednesday"), Thu("Thursday"), Fri( "Friday"), Sat("Saturday"), Sun("Sunday"); private final String day; private WeekDay(String day) { this.day = day; } public static void printDay(int i){ switch(i){ case 1: System.out

20182305 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结

拥有回忆 提交于 2019-12-05 00:57:42
20182305 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结 教材学习内容总结 这一周的学习内容为教材第十六、七章,主要就是和树有关的内容 树。 树就是字面意思,像树一样发展壮大的一种储存数据的结构,由最开始的一个数据(树根)分叉出来,越来越多。 树根:位于树顶层的节点。 双亲和孩子:一个节点相连的下一层节点成为这个节点的孩子。这个节点称为他孩子的双亲。 兄弟:双亲相同的节点互相称为兄弟。 叶子:没有孩子的节点。 深度:树的层数。 阶:节点的阶就是这个节点的孩子数;树的阶数是整个树中,阶数最大的节点的阶。 二叉树:每个节点最多有两个孩子。如果每个节点都有两个孩子,这个树叫完全二叉树。 树的实现: 数组实现:使用数组实现树,数组下标为n的结点的左子树下标为2n,右子树下标为2n+1。 链表实现:链表是最常见的造树方法,二叉链表可连接左右节点,三叉链表可指向父节点。是比较常用的实现树的方法。 树的遍历:递归遍历比非递归遍历更简单,参照一个顺序的遍历可以写出其他顺序的遍历。 前序遍历:先根节点,再左子树,最后右子树 中序遍历:先左子树,再根节点,最后右子树 后序遍历:先左子树,再右子树,最后根节点 递归遍历和非递归遍历代码 二叉树查找:关键点在于以一个根节点为准,左侧都是比它小,右侧都它大于等于它。查找时,就从头挨个比较,小就往左子树找,大就往右子树找。

作业九

你离开我真会死。 提交于 2019-12-05 00:51:01
20182302 2019-2020-1 《数据结构与面向对象程序设计》第8周学习总结 教材学习内容总结 **二叉排序树* 1、平均编码长度:各字符编码长度Li与出现概率Pi之积求和 2、平均编码长度短的有更好性能 3、编码:概率大的编码短,概率小编码长 4、树的带权路径长度 5、最优二叉树/哈夫曼树:带权路径长度最小的二叉树。在哈夫曼书中,带权值越短的 6、构造哈夫曼树 7、已知的最佳无损解压算法 二叉查找树:即用循环寻找要找的元素,原理简单,注意:二叉树有一共同特点,即先确定左子树,再确定右函数。 二叉树删除:删除要分三种情况 (1)删除叶子结点:直接找到到删除的节点的父节点,使父节点的相应左右子树等于null。 用子节点代替他。 (2)删除含一个子结点的结点(左或右):直接用子节点代替他。 (3)删除含左右两个结点的结点:此种类最为复杂,我的方案是先将树中序遍历,取待删除结点前面的一个元素,再在树中寻找这个结点。将这个结点删除,再将待删结点的值改为先前找到的值。 树 树的遍历: (1)先序遍历:先访问根,再访问左右子树。 (2)中序便利:先遍历左子树,再访问根节点,再访问右子树。 (3)后序遍历:先便利左子树,再遍历右子树,最后遍历根节点。 树的分类: 一种是树中任一结点可以具有的最大孩子数目。这个值有时称为该树的度。所含孩子无限为广义树

20182333 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结

大城市里の小女人 提交于 2019-12-05 00:31:50
20182333 2019-2020-1 《数据结构与面向对象程序设计》第九周学习总结 教材学习内容总结 第十六章 树 树 1.树是非线性结构,其元素组织为一个层次结构 2.树的度表示树中的任意结点的最大子结点数 3.有m个元素的平衡n叉树的高度是lognm 4.树的遍历有4种方法 5.进行层序遍历时可采用队列来储存树中的元素 6.使用数组实现二叉树时,位于位置n的元素的左孩子在(2n+1)的位置,其右孩子在(2*(n+1))的位置 7.树的基于数组的存储链实现方式可以占数组中的连续位置,不管树是不是完全树 8.如何在一般二叉树中添加及删除元素,要取决于树的用途 9.使用决策树可以设计专家系统 二叉树 1.二叉查找树时一颗二叉树,对于其中的每个结点,左子树上的元素小于父结点的值,二右子树上的元素大于等于父结点的值 2.如果没有其他的操作,二叉查找树的树形由元素的添加次序来决定 3.最有效地二叉查找树时平衡的,所以每次比较时可以排除一半的元素 4.当从二叉查找树中删除元素时要考虑三种情形,其中的两种比较简单 5.当从二叉查找树中删除有两个子结点的结点时,比较好的办法是用它的中序后继来取代它 6.可以对二叉查找树进行旋转以恢复平衡 部分计算公式 1.二叉树上第i层上的结点数目最多为2^(i-1)(i>=1) 2.深度为k的二叉树至多有2^k-1个结点(i>=1) 3

设计模式——行为型模式之迭代器模式(八)

我是研究僧i 提交于 2019-12-04 22:02:05
迭代器模式 迭代器模式(Iterator Pattern)是 Java 和 .Net 编程环境中非常常用的设计模式。这种模式用于顺序访问集合对象的元素,不需要知道集合对象的底层表示。 迭代器模式属于行为型模式。 介绍 意图: 提供一种方法顺序访问一个聚合对象中各个元素, 而又无须暴露该对象的内部表示。 主要解决: 不同的方式来遍历整个整合对象。 何时使用: 遍历一个聚合对象。 如何解决: 把在元素之间游走的责任交给迭代器,而不是聚合对象。 关键代码: 定义接口:hasNext, next。 应用实例: JAVA 中的 iterator。 优点: 1、它支持以不同的方式遍历一个聚合对象。 2、迭代器简化了聚合类。 3、在同一个聚合上可以有多个遍历。 4、在迭代器模式中,增加新的聚合类和迭代器类都很方便,无须修改原有代码。 缺点: 由于迭代器模式将存储数据和遍历数据的职责分离,增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。 使用场景: 1、访问一个聚合对象的内容而无须暴露它的内部表示。 2、需要为聚合对象提供多种遍历方式。 3、为遍历不同的聚合结构提供一个统一的接口。 注意事项: 迭代器模式就是分离了集合对象的遍历行为,抽象出一个迭代器类来负责,这样既可以做到不暴露集合的内部结构,又可让外部代码透明地访问集合内部的数据。 实现