gap

经典排序算法实现

和自甴很熟 提交于 2020-03-26 00:53:21
冒泡排序 选择排序 插入排序 快速排序 堆排序 希尔排序 归并排序 //java 版本 package com.leej.sort; public class SortAlgorithm { //冒泡排序, 稳定, On^2 public static void BubbleSort(int[] nums) { int n = nums.length; for (int step = 1; step < n; step++) { boolean changed = false; for (int j = 0; j < n - step; j++) { if (nums[j] > nums[j + 1]) { swap(nums, j, j + 1); changed = true; } } if (!changed) return; } } //选择排序, 不稳定 On^2 public static void SelectSort(int[] nums) { int n = nums.length; for (int i = 0; i < n - 1; i++) { int minIndex = i; for (int j = i + 1; j < n; j++) { if (nums[minIndex] > nums[j]) minIndex = j; } if

Python的希尔排序、快速排序和归并排序

本秂侑毒 提交于 2020-03-17 07:08:53
目录 一、希尔排序(Shell Sort) 二、快速排序(Quicksort) 三、归并排序 四、排序算法效率比较 五、搜索 六、二分法查找 一、希尔排序 (Shell Sort) 1、定义:是插入排序的一种,只不过间隔设为gap。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 2、原理:将数组列在一个表中并对列分别进行插入排序,重复这过程,不过每次用更长的列(步长更长了,列数更少了)来进行。最后整个表就只有一列了。将数组转换至表是为了更好地理解这算法,算法本身还是使用数组进行排序。 3、希尔排序的实现: shell_sort(alist): """希尔排序法""" n = len(alist) # 初始步长 gap = n // 2 #折半设定,若n=9,则gap=4 while gap > 0: #gap=1进行最后一次循环 # 按步长进行插入排序 for j in range(gap, n):#从gap开始,控制子序列中的所有元素 i = j # 插入排序 while i > 0: if alist[i] < alist[i-gap]: alist[i-gap], alist[i] =

MobileFaceNets

牧云@^-^@ 提交于 2020-03-17 02:14:19
论文:MobileFaceNets: Efficient CNNs for Accurate RealTime Face Verification on Mobile Devices 0 摘要 作者简单分析了普通的移动式设备上部署的网络应用于人脸验证任务时的缺点,并克服这个缺点设计了高效、准确的人脸验证模型MobileFaceNets。在相同的实验条件下,MobileFaceNets和MobileNetV2识别准确率相当,但速度要快了两倍。使用arcface loss,基于MS-Celeb-1M数据集,大小仅为4MB的MobileFaceNets模型在LFW上取得了99.55%的人脸验证准确率,在MegaFace上FAR=1e-6时的TAR为92.59,这个准确率和大小为数百MB的大模型相当。最快的一个MobileNets在手机上的推理时间仅为18ms。综合来看,MobileFaceNets效率比之前的移动式模型有了很大的提升。 1 核心思想 1.1 传统的轻量化网络用于人脸验证任务时的弊端 轻量化网络,如MobileNetV1,ShuffleNet和MobileNetV2,都使用了全局平均池化层GAP。对于人脸验证和识别任务,有的论文提到使用了GAP之后识别准确率会降低,但这些论文都没有给出理论上的解释。这里,作者尝试从感受野的角度出发来解释下这个问题。

插入排序、希尔排序

最后都变了- 提交于 2020-03-10 06:31:07
插入排序 基本思想: 把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。 void InsertSort ( vector < int > & v ) { for ( int i = 1 ; i < v . size ( ) ; i ++ ) { int k = v [ i ] ; int j ; for ( j = i - 1 ; j >= 0 ; j -- ) { if ( k < v [ j ] ) v [ j + 1 ] = v [ j ] ; else break ; } v [ j + 1 ] = k ; } } 特性总结: 元素集合越接近有序,直接插入排序算法的时间效率越高。 平均时间复杂度:O(N^2)。 空间复杂度:O(1)。 稳定性:稳定。 希尔排序 基本思想: 把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。 void ShellSort ( vector < int > & v ) { int gap = v . size ( ) ; while ( 1 ) { gap = ( gap / 3 ) + 1 ; for ( int i = gap ; i < v . size ( ) ;

dg知识点

心已入冬 提交于 2020-03-05 15:37:25
一、名词: RFS(remote file server):这个进程负责接收网络上传来的redo日志,并把这些日志写到standby redo log文件中。 ARCH:同样是归档进程,只是在备库上,需要归档的是standby redo log文件的内容。 MRP(magaged recovery process):这个进程负责协调介质恢复管理工作,整个物理备库就是建立在介质恢复技术上的。 LSP(logical standby process):这个进程在logical standby中才有,功能和物理备库的MRP进程类似,负责协调SQL APPLY过程。 standby redo log(SRL):Data Guard在备库中,建议配置一种额外的日志文件。叫做standby redo log(SRL),和传统的online redo log(ORL)相比,SRL有着特殊的要求和作用。 online redo log(ORL): fetch archive log(FAL) : FAL_SERVER :指定一个Oracle Net service name,standby数据库使用这个参数连接到FAL server,这个参数适用于standby站点。比如,FAL_SERVER = PrimaryDB,此处PrimaryDB是一个TNS name,指向primary库。 FAL

浅谈有源汇上下界最小流

柔情痞子 提交于 2020-03-03 13:43:13
某个著名 oj 的帖子是这样的 我们可以照无源无汇的可行流,来进行改造,为了照无源无汇的跑,所以要加一条 t -> s ,up = inf, low = 0 的边 此题正常的操作就是先跑 ss 到 tt 的可行流,现在的 实际可行流 不是我们的 \(\sum_{in[i]>0} in[i]\) ,而是 我们建的那条边的流量 自己翻翻定义就好了。 然后,据 newcoder 说的,我们从 t 向 s 反跑最大流 这是为了减去能减的附加流,注意除了 s 和 t 之外的天此时都流量平衡,所以我们可以减去这个最大流 ps: 因为 s , t 不用平衡 。 但是这么跑有的会崩。。 就是说,最大流的依据就是找增广路 ,而算导上对增广路给出的明确定义 ,详情可以参考我写的 博客 既然增广路已经明确是从 s->t 的,所以在 hack 数据上会有问题 ,这是因为 从 s 和 t 一个环,就会造成 s 和 t 会有平衡的问题,就是说,从 t 也要流出,从 s 流入 hack数据 3 3 1 3 1 2 1 100 2 3 1 100 3 1 1 100 而跑最大流的依据就是 s 和 t 流量不平衡。。 所以有问题。。 然后,通过遐想,我想到了一种方法,就是说,可以通过转化 s 与 t 来解决 我们这么搞,建一个 sss ttt 分别于 s , t 建边 然后,把 sss 当作 s , ttt 当作

使用生成器模拟时间分片

放肆的年华 提交于 2020-02-26 11:07:48
对于cpu密集型任务, 时间分片可以有效减少页面卡顿, 不过对于纯计算型任务还是推荐使用worker在后台做计算 效果图, 计算密集型任务被分到每次只执行16ms, 每次执行完毕留给浏览器时间去响应事件 如果设置每次执行1s则页面上的输入框在输入时会有明显卡顿 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <input type="text"> <script> // 计算n*n function* fun() { let ans = 0 while(true) yield ans++ } function timeSplice(gen, ...args) { let g = gen(...args) if (!g || typeof g.next !== 'function') return // let gap = 1000 let gap = 16 return function next() { let start = performance.now(); let res = null; do { res = g.next(); } while (!res.done && performance.now() - start

排序之希尔排序

五迷三道 提交于 2020-02-25 23:56:00
排序是将一串数据按照其某个或者某些关键字的大小进行递增或递减排列的操作我,通常指的排序是升序,排序方式是原地排序 下面介绍下希尔排序 希尔排序 原理: 指定一个值gap,将待排序区间分成gap个组,每个组相邻元素的下标差值是gap。将每个组元素进行排序 减小gap的值,重复进行排序直到gap等于1 当gap等于1的时候,数组变成有序数组 实质: 希尔排序是对直接插入排序的优化 当gap>1时都是进行序排序,当gap=1时,数组已接近有序 希尔排序是一个不稳定的排序 实现方式 public void shellSort(int[] array) { int gap = array.length; while(gap > 1) { insertSortGap(array, gap); //gap的缩小方式决定了性能提升的程度 gap = gap / 3 + 1; } insertSortGap(array, 1); } private void insertSortGap(int[] array, int gap) { for(int i = 0; i < array.length; i++) { int tmp = array[i]; int j = i - gap; for(;j > 0 && array[j] > tmp; j -= gap) { array[j + gap] =

希尔排序

我是研究僧i 提交于 2020-02-25 19:19:44
1.希尔排序 希尔排序法又称缩小增量法。是直接排序的优化。 2.基本思想 希尔排序法的基本思想是:先选定一个整数,把待排序文件中所有记录分成一个组,所有距离为一样的记录分在同一组内,并对每一组内的记录进行排序。然后取整数一半的值,重复上述分组和排序的工作。当值到达1时,所有记录在同一组内排好序。 3.图解 (按从小到大排序,以6个数字为例) ①将整个数组分组gap=arr.length/2;如图颜色一样的为一组。 ②将颜色一样的值进行比较,小的换到前面,大的换到后面;再进行分组gap=gap/2,如图颜色一样的为一组。 ③重复上述步骤。 ④最终排好的序列如图。 4.代码实现 public static void shellSort(int[] array) { int gap = array.length; while (gap > 1) { gap = gap / 2; insertGap(array, gap); } insertGap(array, 1); } public static void insertGap(int[] array, int gap) { for (int bound = 1; bound < array.length; bound++) { int tmp = array[bound]; int cur = bound - gap; for

七大排序总结

*爱你&永不变心* 提交于 2020-02-15 00:32:56
插入排序 直接插入排序 整个区间被分为 有序区间 无序区间 每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入 public static void insertSort ( int [ ] array ) { for ( int i = 1 ; i < array . length ; i ++ ) { // 有序区间: [0, i) // 无序区间: [i, array.length) int v = array [ i ] ; // 无序区间的第一个数 int j = i - 1 ; // 不写 array[j] == v 是保证排序的稳定性 for ( ; j >= 0 && array [ j ] > v ; j -- ) { array [ j + 1 ] = array [ j ] ; } array [ j + 1 ] = v ; } } 性能分析 折半插入排序 在有序区间选择数据应该插入的位置时,因为区间的有序性,可以利用折半查找的思想 public static void bsInsertSort ( int [ ] array ) { for ( int i = 1 ; i < array . length ; i ++ ) { int v = array [ i ] ; int left = 0 ; int right = i ; // [left