伪代码

浅谈整除分块

微笑、不失礼 提交于 2020-03-20 10:28:24
整除分块是一个挺简单但是应用极广的算法。 听上去挺难,实际不难。 实则它是解决这样一类问题: 求: \[\sum_{i=1}^n \lfloor \frac{n}{i} \rfloor\] 你可能觉得这个式子无法下手,连个 \(\gcd\) 也推不起来。 我们下面证明一个结论: 在 \(\lfloor \frac{n}{1} \rfloor\) , \(\lfloor \frac{n}{2} \rfloor \cdots \lfloor \frac{n}{n} \rfloor\) 中, 不同的数值 最多 有 \(2 \times \sqrt{n}\) 个。 证: 首先, \(i \leq \sqrt{n}\) 的时候,肯定取值不超过 \(\sqrt{n}\) 个。 其次, \(i > \sqrt{n}\) 的时候,会有: \[\lfloor \frac{n}{i} \rfloor < \sqrt{n}\] 这个性质不明白,可以去重学因数了 所以,不同的取值也不超过 \(\sqrt{n}\) 个。(实际不能等于 \(\sqrt{n}\) ,但是我们不在乎这点常数) 所以,总取值不超过 \(2 \times \sqrt{n}\) 个。 这是数学上的说法,在编程上说,我们忽略常数,就说是 \(\sqrt{n}\) 个(指时间级别)。 所以,本题可以迅速解决。 for(int i=1;i<

实验伪代码

本小妞迷上赌 提交于 2020-02-19 13:29:48
该篇文章讲述了论文实验部分的伪代码,该实验采用python语言编写,框架采用深度学习框架keras,整体实验分为一下几个部分: 1 第一次训练(first.py) 功能实现: 根据输入的数据文件,处理数据后,切割为训练集和测试集,并在本地生成对应的文件。对整体数据,使用CountVectorizer对邮件文本进行向量化,并且生成了一个字典。用词袋模型将训练集的邮件文本数据转化为词袋特征,并用这些特征训练模型,将该模型生成本地文件。最后,加载训练集文件对模型进行评估,自此该文件运行完毕。 输入: 第一次训练的数据文件(trec06.csv) 输出: 字典文件 第一次训练的训练集和测试集 第一次训练的母模型 Pseudocode: #============================== load data =============================== firstTrainingData < - read the file based on the path of the first training file #df['label'] <- change label "spam" to 1 and label "ham" to 0 in firstTrainingData change label "spam" to 1 and label "ham" to

redis分布式锁递进方案

爱⌒轻易说出口 提交于 2020-02-09 23:26:37
什么是分布式锁 在学习Java多线程编程的时候,锁是一个很重要也很基础的概念,锁可以看成是多线程情况下访问共享资源的一种线程同步机制。这是对于单进程应用而言的,即所有线程都在同一个JVM进程里的时候,使用Java语言提供的锁机制可以起到对共享资源进行同步的作用。如果分布式环境下多个不同线程需要对共享资源进行同步,那么用Java的锁机制就无法实现了,这个时候就必须借助分布式锁来解决分布式环境下共享资源的同步问题。分布式锁有很多种解决方案,今天我们要讲的是怎么使用缓存数据库Redis来实现分布式锁。 Redis分布式锁方案一 使用Redis实现分布式锁最简单的方案是在获取锁之前先查询一下以该锁为key对应的value存不存在,如果存在,则说明该锁被其他客户端获取了,否则的话就尝试获取锁,获取锁的方法很简单,只要以该锁为key,设置一个随机的值就行了。比如,我们有一批任务需要由多个分布式线程处理,每个任务都有一个taskId,为了保证每个任务只被执行一次,在工作线程执行任务之前,先获取该任务的锁,锁的key可以为taskId。因此,获取锁的过程可以用如下伪代码实现: 上述就是最简单的获取锁的方案了,但是大家可以想想这个方案有什么问题呢?有没有什么潜在的坑?在分析这种方案的优缺点之前,先说一下获取锁后我们一般是怎么使用锁,并且又是如何释放锁的,以Java语言为例

伪代码规范

耗尽温柔 提交于 2020-01-01 17:46:01
在伪代码中,每一条指令占一行(else if 例外),指令后不跟任何符号 书写上的缩进表示程序中的分支结构;同一模块中的语句具有相同的缩进量,通常每个算法开始时都要描述它的输入和输出,而且算法中的每一行都给编上行号,在解释算法的过程中会经常使用算法步骤中的行号来指代算法的步骤。 1.变量的声明 算法中出现的数组、变量可以是以下类型:整数、实数、字符、位串或指针。定义变量的语句不用写出来,但必须在注释中给出 2.指令的表示 指令:在算法中的某些指令或子任务可以用文字来叙述,例如,”设x是A中的最大项”,这里A是一个数组;或者”将x插入L中”,这里L是一个链表。这样做的目的是为了避免因那些与主要问题无关的细节使算法本身杂乱无章。 3.表达式 算术表达式可以使用通常的算术运算符(+,-,*,/,以及表示幂的^)。逻辑表达式可以使用关系运算符=,≠,<,>,≤和≥,以及逻辑运算符与(and),或(or),非(not)。 4.赋值语句 赋值语句是如下形式的语句:a←b 。 这里a是变量、数组项,b是算术表达式、逻辑表达式或指针表达式。语句的含义是将b的值赋给a。 变量交换:若a和b都是变量、数组项,那么记号a<->b 表示a和b的内容进行交换。 5.goto语句 goto语句具有形式 goto label(goto标号) 它将导致转向具有指定标号的语句。 6。分支结构 条件语句: if i

攻防世界pwn之新手练习区

核能气质少年 提交于 2019-12-27 01:35:04
0x00 get_shell 题目描述:运行就能拿到shell呢,真的 from pwn import * io = remote('111.198.29.45','36389') io.interactive() 0x01 CGfsb 题目描述:菜鸡面对着pringf发愁,他不知道prinf除了输出还有什么作用 1.基本信息: Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000) 2.ida查看伪代码,按照题目的提示在主函数找到了printf函数,可以明显的看到ptintf没有按照标准格式 printf("<格式化字符串>", <参量表>) 书写,存在格式化字符串漏洞,pwnme的值等于8的时候可以得到flag puts("your message is:"); printf(&s); //漏洞点 if ( pwnme == 8 ) { puts("you pwned me, here is your flag:\n"); system("cat flag"); } printf函数可以接受可变数量的参数,并将第一个参数作为格式化字符串,根据其来解析之后的参数,根据 C 语言的调用规则

LaTeX实用4:伪代码规范(整理)

北慕城南 提交于 2019-12-21 16:40:39
algorithmic和algorithmicx 介绍下algorithmic和algorithmicx,这两个包很像,很多命令都是一样的,只是algorithmic的命令都是大写,algorithmicx的命令都是首字母大写,其他小写(EndFor两个大写)。下面是algorithmic的基本命令 \STATE <text> \IF { <condition> } \STATE { <text> } \ENDIF \FOR { <condition> } \STATE { <text> } \ENDFOR \FOR { <condition> \TO <condition> } \STATE { <text> } \ENDFOR \FORALL { <condition> } \STATE { <text> } \ENDFOR \WHILE { <condition> } \STATE { <text> } \ENDWHILE \REPEAT \STATE { <text> } \UNTIL { <condition> } \LOOP \STATE { <text> } \ENDLOOP \REQUIRE <text> \ENSURE <text> \RETURN <text> \PRINT <text> \COMMENT { <text> } \AND , \OR , \XOR

伪代码基本规范

删除回忆录丶 提交于 2019-12-21 03:41:41
伪代码 每一条指令占一行(else if 例外),指令后不跟任何符号 书写上的缩进表示程序中的分支结构 每个算法开始时都要描述他的输入、输出 算法中每一行都编上行号,在解释算法的过程中用行号来指代算法的步骤 1、变量的声明 算法中出现的数组、变量可以是以下类型: 【整数、实数、字符、位串、指针】 通常这些类型可以从算法上下文判断,不需要额外说明 2、指令或子任务的表示 可以用文字表示 eg: “设x是A中的最大项” => 这里A是一个数组 “将x插入L中” => 这里L是一个链表 3、表达式 算术表达式:算术运算符(+、-、*、/、^) 逻辑表达式:关系运算符(=、≠、<、>、≤、≥) ​ 逻辑运算符(and、or、not) 4、赋值语句 a ← b a:变量/数组项 b:算术表达式/逻辑表达式/指针表达式 若ab均为变量/数组项,则 a ←→ b表示a、b内容交换 5、goto语句 转向具有指定标号的语句 eg: goto label (此处label为goto标号) 6、分支结构 if i = 10 then XXX else XXX if i = 10 then XXX elseif i = 9 then YYY YYY else XXX 7、循环结构 while time < 10 do XXX XXX end for var init to limit by incr

2019-2020-1 20191210戚少波 《信息安全专业导论》第7周学习总结

与世无争的帅哥 提交于 2019-12-04 14:19:26
抽象是指复杂系统的一种模型,只包括对观察者来说必需的细节。 数据抽象是指把数据的逻辑视图和它的实现分离开。 抽象数据类型:应用层,逻辑层和实现层。应用层用来解决问题。逻辑层分好多种类,树是一对多的关系,如二叉树是一对二;线性表是一对一的关系,如栈LIFO(删除的项永远是栈中时间最短的项目),队列FIFO;还有多对多的关系,如图。特别地,二叉检索树中左边的数比根小,右边的数比根大。 实现层有数组,查找方便但难改造。链表容易插入删除但是查找较慢,因为它有两个内容,一个是data,另一个是下一条data的地址。 之后就是遍历(不重不漏),并且掌握三种遍历。 提出问题:伪代码与人类语言、高级语言不同,但是伪代码语言(是一种算法描述语言)的作用是什么?(可能是我没有学会如何编写伪代码语言) 来源: https://www.cnblogs.com/pogbar/p/11869932.html

求最大公约数伪代码

╄→гoц情女王★ 提交于 2019-12-04 04:53:17
一、求两个数的最大公约数的欧几里得算法的算法说明和网上链接 1.算法说明 欧几里德算法是用来求两个正整数最大公约数的算法。是由古希腊数学家欧几里德在其著作《The Elements》中最早描述了这种算法,所以被命名为欧几里德算法。 以除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数 2.网上链接 欧几里得算法 二、 三、 来源: https://www.cnblogs.com/leo-skr/p/11832305.html

实现进制转化伪代码

◇◆丶佛笑我妖孽 提交于 2019-12-04 02:04:16
原理和操作思路 输入一个十进制的数字,将其转化为其他进制 就是将这个数字除进制数得到余数1,不断迭代直到余数n<进制数,于是转化后的数字就是将余数从n——>1排序 操作中出现的问题 无法进行的操作,将一个个余数进行排序 上面的操作没办法用代码俩表现出来 目前已经解决了问题(2,8进制可以适用) https://zhidao.baidu.com/question/589205154461620525.html 现在出现了新的问题,就是如果转化成16进制,没有办法将大于9的数字替换成对应的字符 来源: https://www.cnblogs.com/sisterben/p/11801702.html