首页

文章

有关计算机算法的相关知识

发布网友 发布时间:2022-04-19 09:57

我来回答

5个回答

懂视网 时间:2022-05-10 21:28

什么是计算机程序设计?

  简单的说,它就是告诉计算机要做什么。计算机可以做很多事情,但是不太擅长自主思考,程序员需要像给小孩子喂饭一样告诉它具体的细节,并且使计算机能够理解的语言——算法。

  算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
  算法中的指令描述的是一个计算,当其运行时能从一个初始状态和(可能为空的)初始输入开始,经过一系列有限而清晰定义的状态,最终产生输出并停止于一个终态。一个状态到另一个状态的转移不一定是确定的。随机化算法在内的一些算法,包含了一些随机输入。
  形式化算法的概念部分源自尝试解决希尔伯特提出的判定问题,并在其后尝试定义有效计算性或者有效方法中成形。这些尝试包括库尔特·哥德尔、Jacques Herbrand和斯蒂芬·科尔·克莱尼分别于1930年、1934年和1935年提出的递归函数,阿隆佐·邱奇于1936年提出的λ演算,1936年Emil Leon Post的Formulation 1和艾伦·图灵1937年提出的图灵机。即使在当前,依然常有直觉想法难以定义为形式化算法的情况。

特征

  一个算法应该具有以下五个重要的特征:
  1、有穷性(Finiteness)
    算法的有穷性是指算法必须能在执行有限个步骤之后终止;
  2、确切性(Definiteness)
    算法的每一步骤必须有确切的定义;
  3、输入项(Input)
    一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输入是指算法本身定出了初始条件;
  4、输出项(Output)
    一个算法有一个或多个输出,以反映对输入数据加工后的结果。没有输出的算法是毫无意义的;
  5、可行性(Effectiveness)
    算法中执行的任何计算步骤都是可以被分解为基本的可执行的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性)。

要素

  一,数据对象的运算和操作:计算机可以执行的基本操作是以指令的形式描述的。一个计算机系统能执行的所有指令的集合,成为该计算机系统的指令系统。一个计算机的基本运算和操作有如下四类:
    1,算术运算:加减乘除等运算
    2,逻辑运算:或、且、非等运算
    3,关系运算:大于、小于、等于、不等于等运算
    4,数据传输:输入、输出、赋值等运算[1]
  二,算法的控制结构:一个算法的功能结构不仅取决于所选用的操作,而且还与各操作之间的执行顺序有关。

分类

  算法可大致分为基本算法、数据结构的算法、数论与代数算法、计算几何的算法、图论的算法、动态规划以及数值分析、加密算法、排序算法、检索算法、随机化算法、并行算法,厄米变形模型,随机森林算法。
  算法可以宏泛的分为三类:
    一,有限的,确定性算法 这类算法在有限的一段时间内终止。他们可能要花很长时间来执行指定的任务,但仍将在一定的时间内终止。这类算法得出的结果常取决于输入值。
    二,有限的,非确定算法 这类算法在有限的时间内终止。然而,对于一个(或一些)给定的数值,算法的结果并不是唯一的或确定的。
    三,无限的算法 是那些由于没有定义终止定义条件,或定义的条件无法由输入的数据满足而不终止运行的算法。通常,无限算法的产生是由于未能确定的定义终止条件。

基础数论储备

二次剩余

首先来看一个式子x2≡n(modp),我们现在给出n,要求求得x的值。如果可以求得,n为mod p的二次剩余,其实就是n在mod p意义下开的尽方。Cipolla就是一个用来求得上式的x的一个算法。

勒让德符号

勒让德符号是判断一个数是否为p的二次剩余的一个有力工具,p一定要为奇质数。(n,p)表示n为关于p的勒让德符号。其实就是判断n是否为p的二次剩余。

(np)=???1——p不是n的倍数,n是p的二次剩余?1——p不是n的倍数,n是p的二次非剩余(不是二次剩余就是非剩余)0——p是n的倍数


看起来好像是一大段废话,勒让德只是站在巨人的肩膀上总结了一下而已。
其实勒让德还总结了一些性质,不过一般只用得到欧拉判别准则,不够勒让德符号是个积性函数可能还有点用。
但还是不知道如何判断n是否为p的二次剩余,往下看欧拉判别准则

ll Legendre(ll a, ll p)
{
return qsm(a, (p-1)/2, p);
} 12341234

欧拉判别准则

先来回顾一下欧拉定理xφ(p)≡1(modp)
因为这里的p是奇质数,所以xp?1≡1(modp)
对xp?1进行开方操作,在虚数域中xp?12≡±1(modp),如果等于1就肯定开的了方,为-1一定开不了。所以x是否为n的二次剩余就用这个欧拉判别准则。

if(qsm(n,(p-1)/2)==p-1){ printf("No root ");
continue;
}12341234

-1在mod p意义下为p-1。

算法流程

给出n和p
就算我们n关于p的勒让德符号为1,那么要怎样取开n的方呢?
现在是脑洞大开的时候。

找一个数a

我们随机一个数a,然后对a2?n进行开方操作(就是计算他勒让德符号的值),直到他们的勒让德符号为-1为止(就是开不了方为止)。
就是找到一个a满足(a2?n)p?12=?1
先不要管为什么,后面会讲,我们现在就默默的去膜拜Cipolla的脑洞很大。

while(1){
a=rand()%p;
w=(a*a-n+p)%p; if(qsm(w,(p-1)/2)==p-1)break;
}1234512345

因为是随机找a,那么会不会要找很久。
答案:不会!
?定理1:x2≡n(modp)中有p?12个n能使方程有解
?证明定理1:x2≡n(modp),如果存在不同的数u,v,使他们带入x后可以使方程有解,那么很显然满足u2?v2|p,所以满足(u+v)(u?v)|p,因为
u2?v2|p所以p不可能是(u-v)的倍数,所以(u+v)|p,那么这样的数对在p中存在的数量为p?12
根据定理1,随机找a的期望为2。

建立一个复数域

说是建立,其实根本不用程序去打,说是建立复数域只是跟方便理解。
在平常学的复数域中,有一个i,满足i2=?1。
我们也建立一个类似的域,因为我们要对于a2?n开方,而a2?n有不是p的二次剩余,所以我们定义ω=a2?n?????√。那么现在的ω也像i一样,满足ω2=a2?n,这样我们就定义了一个新的域。

struct CN{
ll x,y;
CN friend operator *(CN x,CN y){
CN z;
z.x=(x.x*y.x%p+x.y*y.y%p*w%p)%p;
z.y=(x.x*y.y%p+x.y*y.x%p)%p; return z;
}
}u,v;123456789123456789

像正常打复数运算一样我们定义一下运算符。可以发现z.x那个地方后面是*w而不是*1,因为现在的域单位复数为ω,满足ω2=a2?n,而不像正常复数的i2=?1。在这个域中的表示方式类似正常的复数:a+bω

得出答案

我们要求的是x2≡n(modp),x的值
我们现在知道了a和ω之后,就能得出答案了。
答案=(a+ω)p+12
真的吗?真的!但是这个答案不是由实数和虚数组成的吗?
根据拉格朗日定理,可以得出虚数处的系数一定为0。

CN Cqsm(CN x,ll y){复数的快速幂 CN z;z.x=1,z.y=0;注意初始化 while(y){ if(y&1)z=z*x;
x=x*x;
y/=2;
} return z;
}123456789123456789
w=(a*a-n+p)%p;
u.x=a,u.y=1;//为什么u.y是1——在复数的统计中只用统计系数就好了
u=Cqsm(u,(p+1)/2);
ll yi=u.x,er=p-u.x; if(yi>er)swap(yi,er); if(yi==er){ printf("%lld ",yi);
} else{ printf("%lld %lld ",yi,er);
}12345678910111234567891011

为什么会有两个答案,比如4√=±2,x2≡(p?x)2(modp)很显然,因为把后面拆开x2≡x2?2px+p2(modp),把p都约去,所以x2≡(p?x)2(modp)。

证明原理

再搞出一些定理方便说明。

定理

?定理2:(a+b)p≡ap+bp(modp)
?证明定理2:根据二项式定理:
(a+b)p≡∑pi=0Cipap?ibi(modp)
≡∑pi=0p!(p?i)!i!ap?ibi(modp)
可以发现,只有当i=0或i=p的时候式子没有p的因子,所以中间有p的因子的都可以省略,所以(a+b)p≡ap+bp(modp)
?定理3:ωp≡?ω(modp)
?证明定理3:ωp
=ωp?1?ω
=(ω2)p?12?ω
=(a2?n)p?12?ω——因为ω2=a2?n
=?ω——因为满足(a2?n)p?12=?1
?定理4:ap≡a(modp)
?证明定理3:ap根据费马小定理
≡ap?1≡1(modp)
所以ap≡a?ap?1≡a(modp)

推导

问题:x2≡n(modp)求解x
Cipolla:x≡(a+ω)p+12(modp)的实数
直接把式子转化:
(a+ω)p+12(modp)
≡((a+ω)p+1)12(modp)
≡((a+ω)p(a+ω))12(modp)
≡((ap+ωp)(a+ω))12(modp)根据定理2
≡((a?ω)(a+ω))12(modp)根据定理3和定理4
≡(a2?ω2)12(modp)根据定理3和定理4
≡(a2?(a2?n))12(modp)满足ω2=a2?n
≡n12(modp)
所以(a+ω)p+12≡n12≡n√(modp)
这脑洞太大了!!!!!!!!!!!!!!

热心网友 时间:2022-05-10 18:36

http://ke.baidu.com/view/1337026.htm
百度全科
定义
计算机算法是以一步接一步的方式来详细描述计算机如何将输入转化为所要求的输出的过程,或者说,算法是对计算机上执行的计算过程的具体描述。
编辑本段性质
一个算法必须具备以下性质:
(1)算法首先必须是正确的,即对于任意的一组输入,包括合理的输入与不合理的输入,总能得到预期的输出。如果一个算法只是对合理的输入才能得到预期的输出,而在异常情况下却无法预料输出的结果,那么它就不是正确的。
(2)算法必须是由一系列具体步骤组成的,并且每一步都能够被计算机所理解和执行,而不是抽象和模糊的概念。
(3)每个步骤都有确定的执行顺序,即上一步在哪里,下一步是什么,都必须明确,无二义性。
(4)无论算法有多么复杂,都必须在有限步之后结束并终止运行,即算法的步骤必须是有限的。在任何情况下,算法都不能陷入无限循环中。
一个问题的解决方案可以有多种表达方式,但只有满足以上4个条件的解才能称之为算法。
编辑本段算法与程序的关系
虽然算法与计算机程序密切相关,但二者也存在区别:计算机程序是算法的一个实例,是将算法通过某种计算机语言表达出来的具体形式;同一个算法可以用任何一种计算机语言来表达。

热心网友 时间:2022-05-10 19:54

首先是高数:这是基础,没的话你后面的没法学。
接着是线性代数
接着是离散数学和数值分析,前面的是后面的基础,前面没学好的话,后面学的很痛苦的

热心网友 时间:2022-05-10 21:29

没有说清楚,无法回答

热心网友 时间:2022-05-10 23:20

你想怎么算?
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 使用puppeteer实现将htmll转成pdf 内卷时代下的前端技术-使用JavaScript在浏览器中生成PDF文档 【译】将HTML转为PDF的几种实现方案 变形金刚08动画怎么样 变形金刚08动画的问题 变形金刚08动画日语版剧情介绍 高分!换显卡nvidia控制面板被我卸了,重新安装显卡驱动后没了nvidia控... 我的nvidia控制面板被卸载了 怎么找回啊 卸载后 这个画面看着很奇怪_百 ... 李卓彬工作简历 林少明工作简历 广东工业职业技术学院怎么样 郑德涛任职简历 唐新桂个人简历 土地入股的定义 ups快递客服电话24小时 贷款记录在征信保留几年? 安徽徽商城有限公司公司简介 安徽省徽商集团新能源股份有限公司基本情况 安徽省徽商集团有限公司经营理念 2019哈尔滨煤气费怎么有税? 快手删除的作品如何恢复 体育理念体育理念 有关体育的格言和理念 什么是体育理念 万里挑一算彩礼还是见面礼 绿萝扦插多少天后发芽 绿萝扦插多久发芽 扦插绿萝多久发芽 炖牛排骨的做法和配料 网络诈骗定罪标准揭秘 “流水不争先”是什么意思? mc中钻石装备怎么做 为什么我的MC里的钻石块是这样的?我想要那种。是不是版本的问题?如果是... 带“偷儿”的诗句 “君不见巴丘古城如培塿”的出处是哪里 带“奈何”的诗句大全(229句) 里翁行()拼音版、注音及读音 带“不虑”的诗句 “鲁肃当年万人守”的出处是哪里 无尘防尘棚 数据结构算法的相关知识有哪些? 12w的充电器配10w的数据线可以吗给苹果x充电? 扫码器上能装快递超市APP吗? 百度知道里面的扫码器在哪里? 在工行APP里怎么才能找到乘公交? 如何使用微信扫码下载app,不用跳转网页的那种 ipad air有没有自带扫码器,比如二维码扫描器哪些 苹果可以用多少w的充电头 MIUI自带扫码器不见了为什么?怎么弄回来? 什么软件只要扫一扫物品,就可以这个物品的详细信息 好孩子推车怎么查防伪,有个防伪条形码,不知道去哪查 手机内H5扫码器,删除掉影响微信扫码吗? 怎样下载扫码器 请列举几个photoshop的软件版本? 学习ps用什么软件好啊? PS主要是干什么用的软件? 如何更好的系统学习PS 熟练掌握ps软件简历上怎么说 ps软件哪个版本用着好? 404 Not Found 百度主流相关性算法有哪些?你知道多少? 如何准备互联网公司面试(算法相关) 算法相关问题。遍历方面,希望给出明确详细答案。 关于算法的学习 计算机专业学算法的都学些什么算法,有什么书可以看的?学的话需要些什么基础的? 关于算法 相关性分析的算法有那些? 算法的概念 求算法相关的论文 如何成为算法工程师 推荐几本算法入门书籍 各种计算方法中的相关参数 普里姆算法的相关信息 算法工程师应该学哪些 想成为一名人工智能算法工程师,大学读什么专业? 计算机相关专业想学习算法,需要看哪些书? c++排序算法相关问题 算法特性是什么? 正品国行,苹果X手机充电器的功率是多少W的? 三星平板电脑开机密码忘了,怎么解锁? 三星平板电脑t550忘记开机密码怎么办?
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com