算法

JAVA经典算法(二十七)

大兔子大兔子 提交于 2020-01-22 13:15:46
题目:求100之内的素数 package cn.ls.lanqiao; import java.util.*; public class Test27 { public static void main(String[] args) { for (int i = 2; i <= 100; i++) { if (isSuShu(i)) { System.out.print(i + " "); } } } public static boolean isSuShu(int target) { for (int i = 2; i < target; i++) { if (target % i == 0) { return false; } } return true; } } 来源: CSDN 作者: ls~wifi 链接: https://blog.csdn.net/ls_wifi/article/details/104068546

DES算法

百般思念 提交于 2020-01-22 12:28:26
一、实验目的及要求 1. 掌握DES算法的原理 2. 编写程序实现这个算法 二、实验设备(环境)及要求 PC机, VC++等 三、实验内容与步骤 1、DES算法(对代码中的主要内容进行分析讲解) 步骤: (1)先编写头文件DES.h,对DES所需的表(置换IP表、逆置换IP表、扩展置换表、单纯换位表、PC1选位表(密钥生成置换表1)、PC2选位表(密钥生成置换表2)、S盒等)进行定义。 (2)输入密钥,char型的密钥转化为Bit型的,接着根据头文件定义的PC1选位表(密钥生成置换表1)进行变换后,Key 的位数由64 位变成了56位,此56位分为C0、D0两部分,各28位,然后分别进行第1次循环左移,得到C1、D1,将C1(28位)、D1(28位)合并得到56位,再根据头文件定义的PC2选位表(密钥生成置换表2)进行变换,从而便得到了密钥K0(48位)。16次循环对应得到子密钥K0、K1……K15。 (3)接着将输入的明文先将char型的明文转化为Bit型的,接着根据头文件定义的置换IP表进行变换。 (4)经过初始置换后,64位的数据块分为两个32位的组,L0和R0。然后根据头文件定义的E位选择表(扩展置换表)进行扩展置换,将Ri-1从32位扩展到48位,接着,计算出48位的结果值与这一轮子密钥Ki的异或值。 (5)接着,需要通过8个单独的S盒执行8次替换操作, (6

银行家算法

…衆ロ難τιáo~ 提交于 2020-01-22 10:06:12
在了解银行家算法之前,我们先了解一下 死锁 的概念和它的相关知识。 死锁 概念 :多个进程相互等待,互不相让,导致所有进程无限期等待。 死锁分为 资源死锁 和 通信死锁 。 资源死锁 :每个进程都在等待其他进程释放资源。资源死锁时最常见的死锁类型。 通信死锁 :由于信息丢失,导致通信双方互相等待对方发送消息。一般可以设置超时时间来解决。 资源死锁条件 1) 互斥条件 :一个进程不能被两个以上的进程同时占有。 2) 占有和等待 :已经得到某个资源的进程可以申请新的资源。 3) 不可抢占条件 :已经分配给一个进程的资源不能被强制性抢占,他只能被占有它的进程显式释放。 4) 环路等待 :死锁发生时,系统中一定有两个及两个以上的进程形成一条环路。 死锁处理 1)忽略问题。 2)检测死锁并恢复 3)避免死锁 4)防止死锁发生 今天我们要说的就是死锁避免的策略— 银行家算法 银行家算法是最有代表性的避免死锁的算法。在避免死锁方法中允许进程动态的申请资源,但系统在进行资源分配之前,应该先计算此次分配资源的安全性,若果分配不会导致系统进入不安全状态,则分配,否则等待。 先说一下算法中需要的数据结构: 1.可利用资源向量 Available :他是一个一维数组。其中的每一个元素代表一类可利用的资源数目。它的数值会根据资源的分配和回收发生改变。比如Available[i]=k

LeetCode算法题-Prime Number of Set Bits in Binary Representation(Java实现)

久未见 提交于 2020-01-22 07:55:25
这是悦乐书的第 311 次更新,第 332 篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第180题(顺位题号是762)。给定两个正整数L和R,在[L,R]范围内,计算每个整数的二进制数中1的个数,判断1的个数是否是一个素数。例如,21的二进制数是10101,其中1的个数有3个,3是一个素数。例如: 输入:L = 6,R = 10 输出:4 说明: 6 --> 110(2个1,2是素数) 7 --> 111(3个1,3是素数) 9 --> 1001(2个1,2是素数) 10 --> 1010(2个1,2是素数) 输入:L = 10,R = 15 输出:5 说明: 10 --> 1010(2个1,2是素数) 11 --> 1011(3个1,3是素数) 12 --> 1100(2个1,2是素数) 13 --> 1101(3个1,3是素数) 14 --> 1110(3个1,3是素数) 15 --> 1111(4个1,4不是素数) 注意 : L,R是[1,10 ^ 6]范围内的整数,并且L小于等于R. R减L的差最多为10000。 本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。 02 第一种解法 第一步,需要先计算出整数的二进制数中1的个数

排序算法学习笔记

与世无争的帅哥 提交于 2020-01-22 07:41:25
排序算法学习笔记 插入排序 时间复杂度:O(N^2),空间:O(N) 描述:向一个已经排序的串中插入值。 public static void sort(int[] arr){ int length = arr.length; int j = 0; for (int p = 1; p < length; p++) { int tmp = arr[p]; for (j = p; j > 0 && tmp < arr[j - 1]; j--) { arr[j] = arr[j - 1]; } arr[j] = tmp; } } 归并排序 时间复杂度:O(NlogN) 空间复杂度:O(2N) 描述:合并两个有序串 public static void sort(int[] arr){ int[] tmp = new int[arr.length]; msort(arr, 0, arr.length - 1, tmp); } private static void msort(int[] arr, int left, int right, int[] tmp) { if(left < right){ int m = (left + right)/2; msort(arr, left, m, tmp); msort(arr, m + 1, right, tmp); merge(arr,

w3cschool算法挑战记录1-7(重复操作算法挑战)

此生再无相见时 提交于 2020-01-22 05:13:41
循环拼接一个指定的字符串 num 次,如果 num 是一个负数,则返回一个空字符串。 个人感觉这个没难度,流程如下: 1、检测num是不是负数,如果是返回空; 2、建立一个for循环,进行字符串拼接; 示例代码如下: function repeat(str,num){ // repeat after me var result = ""; if(num >= 0 ){ for(var i=0;i<num;i++){ result += str; } } return result; } repeat("*", 3); repeat("abc", 3); repeat("abc", 4); repeat("abc", 1); repeat("*", 8); repeat("abc", -2); 来源: CSDN 作者: tacity 链接: https://blog.csdn.net/tacity/article/details/104062644

图像算法一些心得

流过昼夜 提交于 2020-01-22 03:38:42
看了写论文和博客,发现算法实现过程中,有三大难点: 1 图像的复原 在经过一些列计算以后,最后一步就是把数据恢复成图片。这一步很头疼,不同的算法恢复的方式不同。 他不是简单的normalize恢复到0-255之间就行了,或者convertscaleabs就行了(有的可行,但是一个图,·配置一个alpha和beta,其他的图就行不了)。往往一个算法配置某个特定的回复方法。 2 何时用饱和运算 饱和运算就是 但是unit8类型时候,当超过255或者小于0,会进行一个数据处理。什么时候用呢?一般在计算之初会把数据类型变成float32(变成这个类型的原因有很多,包括加速和opencv内在的问提),有的会在图像复原的时候,变成uint8,有的算法在中间设计到uint8的转化,为了减少运算用的内存吗?不太懂。 3 损失信息填补 计算时候,经常遇到小于等于0的数据或者大于255的的数据,或者别的情况。提到他的方法很多,比如小于等于0的,都用0或者0.01代替,或者用个f(x)+b来代替。 这三个问题,如何做选择?寻规道具的做,是没问题,但是就像弄额究竟。 还有就是常熟量的选择问题,很多都是给的经验值。已经有了很多深度学习模型去优化常熟量的方法。这个过程我感觉有点像无监督学习,就像人脸识别一样,也有很多模型了。 来源: CSDN 作者: ChengLaun 链接: https://blog

双指针算法:最长连续不重复子序列

时光总嘲笑我的痴心妄想 提交于 2020-01-21 17:27:06
题目链接:https://www.acwing.com/problem/content/801/ 题意 :给定一个长度为n的整数序列,请找出最长的不包含重复数字的连续区间,输出它的长度。 数据范围 1≤n≤100000 输入样例: 5 1 2 2 3 5 输出样例: 3 思路 :其实这种类型的题也可以暴力枚举做,不过时间复杂度就是O(n^2)了;利用双指针不断移动更新指针的位置,就可以把暴力的算法优化到O(n)了。 代码实现: # include <bits/stdc++.h> using namespace std ; typedef long long ll ; const int INF = 0x3f3f3f3f ; const int MAXN = 1e5 + 5 ; int a [ MAXN ] , s [ MAXN ] ; int main ( ) { ios :: sync_with_stdio ( 0 ) ; cin . tie ( 0 ) ; cout . tie ( 0 ) ; int n , ans = - INF ; cin >> n ; for ( int i = 1 ; i <= n ; i ++ ) cin >> a [ i ] ; for ( int i = 1 , j = 1 ; i <= n ; i ++ ) { s [ a [ i ] ] ++

ICLR 2020:最新加速Nas算法100毫秒训练15000神经网络

房东的猫 提交于 2020-01-21 16:07:40
这篇文章发表在ICLR 2020公认的焦点论文“NAS-BENCH-201:扩展可再现神经结构搜索的范围”中,以供解释。本文提出的NAS-Bench-201可以大大提高NAS算法的可重复性,降低NAS算法的计算要求(例如,搜索仅需0.1秒)。 作者信息 背景 神经网络结构对深度学习领域各种应用的性能起着至关重要的作用。目前,网络结构的设计范式已经从专家手工设计逐渐转变为机器自动搜索。神经架构搜索(NAS)是研究如何在给定的搜索空间中自动发现高性能、高精度、高效率的网络结构。 近几年来,越来越多的研究者投入到NAS的研究领域,提出了越来越多的NAS方法,并在整个领域取得了许多突破。是时候回顾一下NAS的优缺点了。NAS不仅以其良好的性能而闻名,而且由于其庞大的计算需求也使许多研究人员望而却步。同时,各种NAS算法的实验设置也不尽相同,很难公正地衡量一个NAS算法的真实性。 为了进一步提高NAS算法的可重复性,降低NAS算法的计算需求,让大家关注NAS算法的本质,并启发后续的NAS算法,我们提出了NAS-Bench-201。 什么是NAS-Bench-201? NAS-Bench-201在基于不同超参数的不同随机数种子的三个数据集(CIFAR-10、CIFAR-100、ImageNet-16-120)上训练了15000多个神经网络。提供重要信息,如每个训练周期后的训练和测试时间、训练集