![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法设计与分析
文章平均质量分 77
郝伟博士
郝伟,男,留日计算机博士,副研究员,硕士生导师。师从东京大学松崎公纪教授,主要研究方向为网络安全、并行计算与大数据,尤其是在网络环境下大数据安全性的研究。北京华云安信息技术有限公司首席研究员,中新网安技术研究员,上海莱镁晟信息科技有限公司技术顾问。参与国家973项目和国家科技重大专项各1项,主持国家科研项目1项,13项国家发明专利,各类论文25篇,合肥市政认定高层次人才。与清华大学、海克斯康、国防科技大学等多家单位有技术合作。
展开
-
梯度下降计实例计算(三维)
简介在文章 1中,介绍了一维函数进行梯度下降的示例。在本文中,我们将介绍二维的梯度下降。函数定义已经函数 z=f(x,y)=(x−4)2+(y−4)2=x2+y2−8x−8y+32z=f(x, y) = (x-4)^2 + (y - 4)^2=x^2+y^2-8x-8y+32z=f(x,y)=(x−4)2+(y−4)2=x2+y2−8x−8y+32。方向导数分别为zzz的xxx偏导数: ∂z∂x=2x−8\frac{\partial z}{\partial x} = 2x-8∂x∂z=2x−8原创 2021-03-29 08:29:47 · 1854 阅读 · 2 评论 -
一道100个飞机乘客随机坐座位的趣味概率问题
题目如下所示分析题目初看觉得很难用概率学的计算公式来解决,但是对于计算机专业的我们来说,可以方便地使用计算机模拟来解决。这又是一道蒙特卡罗求解算法。我们只要模拟每一次实验,然后执行多次求结果即可。代码实现验证代码使用Python完成。import randomdef onetest(): available_seats = [i for i in range(100)] arrangement = {} for i in range(100): pos原创 2021-03-04 11:56:35 · 1355 阅读 · 3 评论 -
通过统计7万多真实人名生成可信的随机人名
简介随机生成人名有很多应用场景,比如数据库系统学习,网络攻防等。为了生成真实可信的人名,本文通过对约7.1万真实的人名进行频率学习,统计出最常用的100个姓,100个男名和100个女名(均为双字),然后通过随机提取姓和名的组合,可以生成看上去非常真实的姓名,比如:注:如果需要更多的真实人名信息,可以与我联系(18815694732)。---------------------------------男名---------------------------------赵 杰,姜子豪,马 龙,蔡兵原创 2021-02-21 09:22:03 · 3783 阅读 · 0 评论 -
实验验证二项分布(Binomial)公式正确性
1 实验目的本次实验主要是通过随机生成的符合Binomial分布的随机数,以验证其概率计算公式的正确性,其公式定义如下:P(X∣n,k)=(kn)pk(1−p)(n−k)P(X|n,k) = (_k^n)p^k(1-p)^{(n-k)}P(X∣n,k)=(kn)pk(1−p)(n−k)其中,(kn)=Cnk=n(n−1)(n−2)...(n−k)=n!k!(n−k)!(_k^n)=C_n^k=n(n-1)(n-2)...(n-k)=\frac{n!}{k!(n-k)!}(kn)=Cnk=n(原创 2021-02-02 11:45:14 · 1408 阅读 · 0 评论 -
通过一个示例说明为什么需要使用Lamba表达式
文章目录前言示例说明原始代码使用Lambda表达式的代码代码比较前言Lambda表达式是一种简洁的定义函数的方法,其本质就是匿名函数,在很多语言中都受到了支持。但是为什么要使用Lambda表达式呢?通常来说,答案有两点:方便简洁 和 可读性好,即可以使用较少的代码对一些简单的功能进行实现。但是这个说法还是很抽象的,为了让大家更好地理解Lambda表达式的具体作用,下面让我们来看这样的一个实例。示例说明在这个示例中,我们定义了几个函数包括常数函数、一次函数、二次函数等,然后生成随机数并使用matpl原创 2020-11-28 16:11:32 · 358 阅读 · 0 评论 -
使用三次回归预测2020年淘宝双11销量约为3282亿
2019年,本人发了篇文章,《双十一数据造假?让我们用Python来验证一下》,在2019年淘宝双11后,对其数据进行了分析。今年,利用这个计算结果,对2020年淘宝双11的销量进行回归预测。计算结果显示2020年的中位数为 3282亿,有98%的几率落在区间 [3216, 3347] 上,请拭目以待 ,看看这个预测是否准确。...原创 2020-10-28 18:38:30 · 590 阅读 · 0 评论 -
在C#中使用正则表达式提取括号中的内容
问题给定字符串 "OUTPUT/FA(CIR1),TA(POS1__X),TA(POS1__Y),TA(POS1__Z),TA(POS1__D)" 现在需要取得括号中的内容,如 CIR1、POS1__X、POS1__Y 和POS1__Z,如果我们使用字符串操作,肯定是可以取得,但是如果类似的操作比较频繁,我们完全可以使用正则表达式来完成。正则模式定义假定括号中的内容是数字、字母和下划线,那么我们可以使用以下字符来定义:[0-9a-zA-Z_]+ 或者可以直接使用简化符号/w,变为 \w+。因为我们要原创 2020-10-24 10:05:44 · 16503 阅读 · 0 评论 -
使用Java对一个自然数进行因式分解
问题给定一个自然数,返回其因式分解,如:35: [5, 7]28: [2, 2, 7]46: [2, 23]512: [2, 2, 2, 2, 2, 2, 2, 2, 2]320: [2, 2, 2, 2, 2, 2, 5]3234: [2, 3, 7, 7, 11]算法对指定的自然数进行循环,每次循环中使用计数器i与之求余,如果可以整除则进行记录到一个List中,当除的值最终为1时,循环结果,最后将计算结果输出。代码import java.util.ArrayList;publ原创 2020-10-18 08:52:36 · 1314 阅读 · 2 评论 -
使用计算机求函数极限示例
问题求值:limx→∞4x2+x−4x2\lim_{x \rightarrow \infty} \sqrt{4x^2 + x} - \sqrt{4x^2}x→∞lim4x2+x−4x2数学方法上下同乘以 4x2−x+4x2\sqrt{4x^2 - x} + \sqrt{4x^2}4x2−x+4x2 得:limx→∞(4x2+x−4x2)(4x2−x+4x2)4x2+x+4x2=limx→∞4x2+x−4x24x2−x+4x2=limx→∞x4x2+x+4x2\lim_{x \rig原创 2020-10-13 14:08:12 · 3703 阅读 · 0 评论 -
一个具体的BP算法示例
简单的神经网络根据身高H和体重W,我们可以建立以下的神经网络:损失函数根据上一节的内容,我们可以知道,损失函数可以定义如下:Loss=1n∑i=1n(yi−y^i)2Loss = \frac{1}{n} \sum_{i=1}^n (y_i-\hat y_i)^2Loss=n1i=1∑n(yi−y^i)2所以,损失函数实际是上包括 w1,w2,w3,w4,w5,w6,b1,b2,b3w_1, w_2, w_3, w_4, w_5, w_6, b_1, b_2, b_3w1,w2原创 2020-09-29 19:16:08 · 471 阅读 · 0 评论 -
生成男女体重的随机二维数据
import numpy as npimport matplotlib.pyplot as plt# import matplotlib as mpl# import numpy as np # from matplotlib import pyplot as plt import matplotlib.pyplot as pltimport numpy as npfrom matplotlib.font_manager import FontPropertiesimport ra.原创 2020-09-25 16:22:21 · 1213 阅读 · 0 评论 -
单日志管理线程实现每秒百万级日志写入机制设计与实现
Logs.Length = 1048576 x 10logs[0].Length = 60Init: 530.61msSave: 7714.36ms130万条 60字节长度数据写入,文件大小 :620MBLogs.Length = 1048576 x 10logs[0].Length = 100Init: 527.56msSave: 9394.87ms106万条 1000字节长度...原创 2020-08-27 15:43:52 · 877 阅读 · 0 评论 -
在C++中计算经纬度(附34个城市两两间的距离计算结果)
文章目录计算说明C++实现代码计算结果计算说明本文使用C++根据输出两个城市的经纬度计算两地间的距离。几点说明:经度为E,如果开头为W则取负值;纬度为N,如果开头为S则取负值;结果单位为公里C++实现代码#include <iostream>#include "math.h"#include <vector>using namespace std;double getDistance(double lat1, double long1, double原创 2020-08-25 16:12:48 · 2321 阅读 · 0 评论 -
一个对文本信息统计的熵增验证程序
文章目录简介熵的数学定义验证原理结论附:源代码简介熵增定律是基于第二热力学定律的著名定律,描述了任何一个系统,包括宇宙本身的熵都是不断增加的定律。本文通过对TXT格式的文章进行测试,以验证为熵增定律。熵的数学定义给定一离散分布变量XXX,其可能值为 x1,x2,...,xnx_1, x_2, ..., x_nx1,x2,...,xn,每个值出现的对应概率为P(x1),P(x2),...,P(xi)P(x_1), P(x_2), ..., P(x_i)P(x1),P(x2),...,P(xi原创 2020-08-20 16:49:32 · 367 阅读 · 0 评论 -
一道C++算法题:将纳秒数转化为日期时间
2020/07/11 void initilize(long long time) { int seconds = time / 1000000000; int nanoseconds = time % 1000000000; int days = seconds / 86400; year = 1970 + (int)(days / 1461) * 4; day = days % 1461; day = day > 730 ? day - 1 : day;原创 2020-08-19 07:35:44 · 1935 阅读 · 0 评论 -
关于一个经典经济学问题的反思
如果你是一家托儿所的所长,托儿所明文规定,托管儿童下午4点前必须被接走,但家长经常迟到,每天下班总有几个孩子没走,至少得有一名教师留下来等待家长,怎么办?幼儿园宣布迟到10分钟以上的家长,每名儿童每次罚款3美元。实行后发现,迟到的家长更多了。因为即使家长每天迟到每月最多话60美元,仅为托管费的六分之一,相当划算。但如果罚款为100美元而非去去3美元,虽能杜绝家长迟到,确也会引起家长反感,因为罚款...原创 2020-08-17 08:22:37 · 379 阅读 · 0 评论 -
一架飞机有三年不出错的几率有多大?
根据概率学计算飞机一百万个零件连续三年不出错的几率有多大。168.268949213709%0%295.449973610364%0%399.730020393674%0%499.993665751633%8.6901145E-164%599.999942669686%3.207046232974%699.999999802683%98.823075341442%正态分布μ\muμ表示平均值,σ\sigmaσ...原创 2020-08-17 08:15:01 · 369 阅读 · 0 评论 -
为什么要使用正则表达式(Python版)
正则表达式(Regular Expression,常简写为regex、regexp或re),是文本处理中的一个重要概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本,简单地说,正则表达式就是一门专门用于字符串处理的增强语法。为了了解什么是正则表达式,我们先看一个简单的示例。问题:在字符串 “我叫张三今年28岁,身高182cm,体重90kg,以前的手机号是13912345678,现在的手机号是:18812345678, 家里的电话是66658933,身份证号是 340403198501011原创 2020-08-07 08:21:46 · 1183 阅读 · 0 评论 -
RSA算法详解
算法思想RSA算法核心的思想只有两部分:Alice随机生成两个数作为解密,一个被称为公钥发布给所有人,另一个作为私钥只有自己持有;任何人可以使用公钥对数据加密,只有Alice可以使用私钥解密获得原数据。这样,Bob就可以使用公钥对要传输的数据加密再发给Alice,即便Bob加密后的数据泄露也不怕,因为别人没有密钥,无法解开。主要特性所以RSA算法的神奇之处有两点:数据只能使用公钥加密,必需使用私钥才能解开这种加密方式称之为非对称加密,即加密和解密的密钥是不相同的。对应的有对称加密,即加原创 2020-07-23 08:07:35 · 1632 阅读 · 1 评论 -
使用正则表达式将 a = b; 转换为 b = a;
我们在写代码的时候经常会有这样的需求,将赋值表达式左右两则的值交换,如将 "a=b;" 转换为 "b=a;"。本文就介绍如何使用正则表达式达到此需求。原创 2020-07-13 07:59:08 · 906 阅读 · 0 评论 -
质数是有限个还是无限个?
前言这个问题等价于是否存在最大的质数。我们知道,质数(也叫素数)是只能被1和自身整除的数。对于一个数n,我们只要从2开始作为除数与n进行除法运算,判断能否整除,即可知道n是不是素数。随着数越来越大,n是质数的概率越来越低,原因很简单,因为数据太大,所以有除1和自身外的约数的几率越大。所以,会不会大到一定的程度,就没有素数了,即存在一个最大的素数。本文的证明方法,很常见,是由伟大的数学家欧几里得完成的。欧几里得(英文:Euclid;希腊文:Ευκλειδης ,约公元前330年—公元前275年),古希腊人原创 2020-07-10 10:07:59 · 2103 阅读 · 0 评论 -
证明√2是无理数
我们可以用反证法来证明。证明假设 2\sqrt 22 是有理数,那么根据有理数定义 2=a/b\sqrt 2=a/b2=a/b,其中 a,ba, ba,b 是两个互质的整数且 b≠0b \neq 0b=0。所以 2b2=a22b^2=a^22b2=a2,由于 a,ba, ba,b 都是整数,所以很容易可以推断出 aaa 是偶数。不妨设 a=2na = 2 na=2n,由于 aaa 是偶数,所以 nnn 也是整数。所以可得 2b2=(2n)22b^2 = (2n)^22b2=(2n)2,即 b2原创 2020-07-10 09:46:36 · 738 阅读 · 0 评论 -
用反证法证明辗转相除法
辗转相除法是一种快速求两个数最大公约数的一种算法,其核心的思想是 gcd(a,b) = gcd(b, a mod b)。至于为什么这样,本文就给出证明过程。题目证明 gcd(a, b)=gcd(b, a mod b) ,其中 a,ba, ba,b 是正整数,函数 gcd 用于求 a, b 的最大公约数。证明设 r = a mod b,则 a = k * a + r,其中 k 为整数。设 g = gcd(a, b),那么:① b mod g = 0,乘以 k 后可得:(k * b) mod g原创 2020-07-09 14:26:44 · 464 阅读 · 0 评论 -
欧拉定理详解
欧拉定理(Euler Theorem),也称费马-欧拉定理或欧拉函数定理,是一个非常重要的函数,是现代加密学广泛使用的一个公式,比如著名的RSA算法就是基于欧拉定理。欧拉定理的内容是关于正整数同余的计算恒等式,表示为:$$a^{φ(n)} \equiv1 (\mathrm{mod} \ n)$$其中,$a$ 与 $n$ 均为正整数,且两者互质。这个公式有哪些神奇之处,为什么会受到如此重视和广泛应用,公式的具体含义是什么,在实际中如何使用,本文就这些问题进行详细解释。......原创 2020-07-03 21:36:49 · 20105 阅读 · 7 评论 -
RSA加密算法耗时耗在哪里?
文章目录结论1:密钥生成占据初始化99%的时间结论2:加密耗时占据99%的时间附:源代码结论1:密钥生成占据初始化99%的时间 public void createKeys(int keySize) throws Exception { long t1 = System.currentTimeMillis(); KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); kpg.initialize(keySize); long原创 2020-06-24 07:51:13 · 4707 阅读 · 0 评论 -
余数的数学定义和性质
前言在密码学中,求余是非常重要的操作,比如在DH算法中,就主要利用了求余的算法。本文就余数计算和相关性质进行介绍。定义给定 a,b,q,r∈Za, b, q, r \in \mathbb{Z}a,b,q,r∈Z, 其中 b≠0,0≤r≤bb \neq 0,0 \leq r \leq bb=0,0≤r≤b, 满足 q×b+r=aq \times b + r = aq×b+r=a,则称 rr...原创 2020-05-03 20:59:57 · 2023 阅读 · 1 评论 -
从中国历年人口数据简单分析未来房价走势(本分析仅供参考)
以下数据来自中国统计局官方网站从1981 - 1997 的连续17年,中国每年人口净出生人口都在2000万以上。从1998年开始,逐年减少,从2001年开始至2017年,每年净出生人口基本在1600万左右。所以在最近十五年,正是赶上 1981-1997出生的这一波人要买房,因此把房价无情地快速推高。随着这批人买房需求的满足,房屋需求开始下降,这也解释了为什么这几年一直有人在喊房价要降,并且...原创 2019-02-28 12:35:57 · 4539 阅读 · 0 评论 -
MD5算法的Java高效精简的实现
源代码本文只给出了具体的实现,至于算法原理请参考相关文章。注:本算法系数参考百度百科:MD5。算法经过简化后,如下所示。public class MD5 { private static final int[] mix = { 0xd76aa478, 0xe8c7b756, 0x242070db, 0xc1bdceee, 0xf57c0faf, 0x4787c62a, 0xa8304613, 0xfd469501, 0x698098d8, 0x8b44f7af, 0xffff5bb1原创 2020-06-05 07:58:10 · 638 阅读 · 0 评论 -
Kad算法模拟测试程序
本代码主要用于Kad算法的模拟测试,以理解其工作原理。原创 2020-06-03 17:01:07 · 749 阅读 · 1 评论 -
高效计算一个字节中所有的1的个数。
就如何高效计算一个字节中所有的1的个数的问题,本文提了三种方法。原创 2020-05-26 20:02:42 · 1805 阅读 · 0 评论 -
以2万人天的检测能力给武汉1500万人做全民检测最快要几天?实践证明可行!
网上有个新闻,说1500万人检测需要2年半:《[张文宏称全民核酸筛查不切实际,光武汉市1500万人检测完要花2年半](https://kuaibao.qq.com/s/20200423A0CZPI00)》,此结论的依据是每天的检测能力是2万人。那么我们能否在不改变现有检测能力的情况下,加速检测过程呢?本文就此问题,提出一个可能的解决问题的思路。原创 2020-05-18 11:27:28 · 1346 阅读 · 1 评论 -
[学习笔记]简介数据结论中图论相关知识
在数据结构中,图论的相关知识点很多,为了方便学习,本文对相关内容进行了最简要的总结。原创 2020-05-13 14:36:22 · 342 阅读 · 0 评论 -
Java集合类型常见操作的时间复杂度
Java中的Collection中的数据类型很多,以下为主要数据类型的时间复杂度,这个时间复杂是根据理论推导出来,是作者的知识和经验总结,如果有错误欢迎指正。原创 2020-05-07 17:16:43 · 999 阅读 · 0 评论 -
理解文章《拥有多个A的概率:又一个条件概率悖论》中的一个看似奇怪的现象
在阅读了文章[拥有多个A的概率:又一个条件概率悖论]以后,觉得很难理解,于是就做了一个简单的实验,终于理解了其中的原因。原创 2020-05-06 22:30:56 · 471 阅读 · 0 评论 -
算法入门
定义算法(Algorithm)是指用于解题问题的具体的方法。在计算机领域,算法是指一系列明确的操作的组合以根据指定的输入计算出所需要的结果。广义来说,用于解决问题的一系列的方法或步骤都可以称之为算法。比如制作一个汉堡,从准备材料到加工的整个过程,就是一个算法。特性关于算法特性的描述,一般采纳的都是高德纳(Donald E. Knuth)的著作《计算机程序设计艺术》的 1.1 算法 中,对算法...原创 2019-07-16 17:34:08 · 1115 阅读 · 2 评论 -
DH算法原理深入详解
文章目录前言1 应用场景2 DH算法简介3 基本原理2.2 基本后果3 算法实现4 数学证明前言DH 算法是 Diffie和Hellman两位作者于1976年提出了一种的密钥交换协议。1 应用场景Alice想要给Bob传递一些资料,为了保证信息安全,Alice对资料打包并加密,然后把解压密码用短信发给了Bob。这样一来,邮件在传输的过程中泄露,别人没有密码,也无法破解资料的内容(假定加密算...原创 2020-05-05 17:01:56 · 10691 阅读 · 6 评论 -
编写Java代码实现求1001的803次方除以137的余数
求余运算是Java的基本功能,可以直接使用 (int)Math.power(a,b) % p 进行计算,但是由于指数运算增长太快,非常容易就超出 Integer 的数据类型,即便我们使用 Long,其最大值也不过是 264-1,约为 1.84X1019,远远小于 1001803,所以显然是无法直接求的。原创 2020-05-05 10:06:02 · 531 阅读 · 0 评论 -
Java中的hashCode的计算方法与原理
在Java中,每个对象都有一个从Object基类派生出的 hashCode() 方法,用于根据当前对象的某些特征返回一个整型变量。其核心源代码中有个奇怪的数字31,本文就计算公式和取这个数字的含义进行详细的说明。原创 2020-05-03 17:08:13 · 8336 阅读 · 2 评论 -
深入理解时区概念:GMT,UTC,UTS和AOE
随时全球化的发展,国内的企业已经开始越来越多地与国际接轨,超出国门而向全球用户。由于大家都知道原因:地球是圆的,所以针对不是国家的地区所使用的时间表示问题,成为全球化中的一个重要问题,就此本文对三个重要的时间概念:GMT、UTC和Unix时间戳进行详细说明。原创 2020-04-28 12:48:23 · 14063 阅读 · 2 评论 -
找到Java中长整型(long)所能表示的最大素数: 9223372036854775783
素数在信息安全领域经常被用于数据摘要或密钥的生成算法中,为了计算大素数也有很多的算法,本文只是通过最简单的算法找出在Java中long数据类型所能表示的最大素数。原创 2020-04-21 17:22:45 · 2318 阅读 · 0 评论