n2

常用的排序算法的时间复杂度和空间复杂度

匿名 (未验证) 提交于 2019-12-03 00:38:01
排序法 最差时间分析 平均时间复杂度 稳定度 空间复杂度 冒泡排序 O(n 2 ) O(n 2 ) 稳定 O(1) 快速排序 O(n 2 ) O(n*log 2 n) 不稳定 O(log 2 n)~O(n) 选择排序 O(n 2 ) O(n 2 ) 稳定 O(1) 二叉树排序 O(n 2 ) O(n*log 2 n) 不一顶 O(n) 插入排序 O(n 2 ) O(n 2 ) 稳定 O(1) 堆排序 O(n*log 2 n) O(n*log 2 n) 不稳定 O(1) 希尔排序 O O 不稳定 O(1) 1、时间复杂度 (1)时间频度 一个算法执行所耗费的时间,从理论上是不能算出来的,必须上机运行测试才能知道。但我们不可能也没有必要对每个算法都上机测试,只需知道哪个算法花费的时间多,哪个算法花费的时间少就可以了。并且一个算法花费的时间与算法中语句的执行次数成正比例,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)。 (2)时间复杂度 在刚才提到的时间频度中,n称为问题的规模,当n不断变化时,时间频度T(n)也会不断变化。但有时我们想知道它变化时呈现什么规律。为此,我们引入时间复杂度概念。 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f

单链表的逆置/反转

匿名 (未验证) 提交于 2019-12-03 00:30:01
题目: 单链表的逆置/反转。 解题思路: 思路一: 定义三个指针,n1,n2,n3,初始值分别为 :链表第一个节点,链表第二个节点,第三个节点。n2保存的是n1的地址,n3保存的是n2的地址,通过n3来往后遍历,直n2为空,这时n1指向最后一个元素,这时返回n1,就可以逆置链表 如下图: 代码实现: SListNode *reserveNode(SListNode *pFirst) { SListNode *n1, *n2, *n3; if (pFirst== NULL || pFirst->pNext == NULL) return pFirst; n1 = pFirst; n2 = n1->pNext; n3 = n2->pNext; while (n2) { n2->pNext = n1; n1 = n2; n2 = n3; if (n3) n3 = n3->pNext; } pFirst->pNext=NULL; pFirst = n1; return pFirst; } 思路二: 通过头插法:定义两个指针一个pNewNode指向空,pNode指向链表头,pNode遍历链表,在遍历的时候再定义一个指针来保存pNode遍历的值,然后头插到节点pNewNode上,而不是创一个新链表。 SListNode *reserveNode1(SListNode *pFirst) {

CAP理论

匿名 (未验证) 提交于 2019-12-03 00:30:01
CAP理论 小结: Consistency 一致性 就是数据的一致性。一致性根据时间长短来达到一致性,又分为 强,弱,最终一致性 Availability 可用性 可用性是针对用户角度,发送一个请求,一定回复。保证这一点就是可用性 分区容错性 就是分布式节点中 某一个节点挂了,系统还能满足一致性和可用性 CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但其实分区不是你想不想的问题,而是始终会存在,因此CA的系统更多的是允许分区后各子系统依然保持CA。 CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。 AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。 因为 AP更为重要 所以一般都是C,使用最终以执行 版权 我仅对文章的排版和部分文字进行了润色 2000年7月,加州大学伯克利分校的Eric Brewer教授在ACM PODC会议上提出CAP猜想。2年后,麻省理工学院的Seth Gilbert和Nancy

【6.6 清北笔记】

匿名 (未验证) 提交于 2019-12-03 00:22:01
1 有 1 n 1 n 一共 n n 个数, n n 为偶数。小Q要把这 n n 个数随机地两两配对。令每一对的权值为它们两个数的和。小Q想要知道这 n n 对里最大的权值的期望是多少。请输出答案对 10 9 + 7 10 9 + 7 取模的值。 枚举最大值 w w 。 计数。 把数分成大于 w / 2 w / 2 和小于 w / 2 w / 2 两部分。 大于 w / 2 w / 2 的只能和小于的配对。 从大到小枚举 > w / 2 > w / 2 的部分。 每个数都有 ( n v ) ( n v ) 种选择。 然后剩下的是一个完全图计数。 不能从a到c 任意初始状态 结束状态 考虑最大的盘子,如果它在它应该在的位置,那么很好,如果不在,就需要把其他的盘子移到另一个柱子上,再移动。 O(n) int solve( int *a, int n, int t) { while (n&&a[n]==t) n--; if (!n) return 0 ; int x= 6 -a[n]-t; //要移到哪个柱子 return solve(a,n- 1 ,x)+ 1 +ans[n- 1 ]; //ans就是2^n-1 } m个柱子 f [ n ] [ m ] = m i n ( f [ k ] [ m ] + f [ n k ] [ m 1 ] ) f [ n ] [ m ] = m i n

2-08元祖类型

匿名 (未验证) 提交于 2019-12-02 23:49:02
数据类型――元祖 元祖其实跟列表差不多,也是存一组数,只不过它一旦创建,便不能再修改,所以又叫只读列表。 names = ('alex','jack','eric') 不可变 元祖本身不可变,如果元祖中还包含其他可变元素,这些可变元素可以改变 >>> n2[3][0]='c' >>> n2 (1, 2, 3, ['c', 'b'], 5) >>> index count 切片 显示的告知别人,此处数据不可修改 数据库连接配置信息等

软件工程--结对第二次作业

匿名 (未验证) 提交于 2019-12-02 23:32:01
题目1: 我们在刚开始上课的时候介绍过一个小学四则运算自动生成程序的例子,请实现它,要求: 能够自动生成四则运算练习题 可以定制题目数量 用户可以选择运算符 用户设置最大数(如十以内、百以内等) 用户选择是否有括号、是否有小数 用户选择输出方式(如输出到文件、打印机等) 最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主) 本次作业要求两个人合作完成,驾驶员和导航员两个角色: 驾驶员:简** 基本完成全部代码工作,程序基本实现全部要求功能,并将代码上传到GitHub代码托管系统(此处附代码地址)中, 并对导航员在本次编程工作中起到的作用给出客观评价; 导航员:韩* 辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试,并且根据代码检查表对驾驶员的本次工作进行评价; 四则运算生成函数 # def newint() 生成整数四则运算 def newint(): global questionString,rawEquation opr = ['+', '-', '×', '÷'] # 以下fh取符号,n1、n2取随机整数 fh = random.randint(0, 3) n1 = random.randint(1, 20) n2 = random.randint(1, 20) if fh == 1: # 防止出现负数

PHP浮点计算结果返回异常问题

匿名 (未验证) 提交于 2019-12-02 22:11:45
php中如果直接小数点进行计算的话。比如16.8*3 var_dump是50.4。 但是return就变成了50.400000000000006。 至于是什么原因本人尚不得而知。 解决方法是用把计算放入下面的方法计算: function PriceCalculate($n1, $symbol, $n2, $scale = '2') { $res = ""; if (function_exists("bcadd")) { switch ($symbol) { case "+"://加法 $res = bcadd($n1, $n2, $scale); break; case "-"://减法 $res = bcsub($n1, $n2, $scale); break; case "*"://乘法 $res = bcmul($n1, $n2, $scale); break; case "/"://除法 $res = bcdiv($n1, $n2, $scale); break; case "%"://求余、取模 $res = bcmod($n1, $n2, $scale); break; default: $res = ""; break; } } else { switch ($symbol) { case "+"://加法 $res = $n1 + $n2; break; case

Linux编程 24 shell编程(结构化 if [ condition ] 数值比较,字符串比较)

匿名 (未验证) 提交于 2019-12-02 21:53:52
一.概述   接着上篇讲的结构化命令 ,最后讲到了 test命令的另一种写法 if [ condition ],它的语法格式如下: --格式如下: if [ condition ] then commands fi   第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。 test命令可以判断三类条件: (1)数值比较 (2)字符串比较 (3)文件比较。 比较 描述 例如 n1 -gq n2 N1 ==N2 n1 -ge n2 检查n1是否大于或等于n2 N1 >=N2 n1 -gt n2 检查n1是否大于n2 N1 < N2 n1 -le n2 检查n1是否小于或等于n2 N1 <=N2 n1 -lt n2 检查n1是否小于n2 N1 <N2 n1 -ne n2 检查n1是否不等于n2 N1 !=N2     下面测试脚本中,第一个条件使用 -gt, value2。 第二个条件使用 -eq 测试 value1 是否与 value2相等。                 但涉及到浮点数时,就会出错, bash shell 只能处理整数,如下所示:                对于浮点数处理,在前面章节中讲过使用bc 命令,下面脚本中先用bc来判断,如果条件成立则返回1, 条件不成立返回0, 下面的var1变量返回为1,输出了echo语句信息。           

golang(一)

落花浮王杯 提交于 2019-12-02 18:16:46
开篇先来个Go语言的吉祥物- 金花鼠 Gordon。 golang 是谷歌2009年发布的开源编程语言,截止目前go的release版本已经到了1.10。go语言的开发人员都是计算机界大神一般的存在: Thompson:1983年图灵奖(Turing Award)和1998年美国国家技术奖(National Medal of Technology)得主。他与Dennis Ritchie是Unix的原创者。Thompson也发明了后来衍生出C语言的B程序语言。 Pike:曾是贝尔实验室(Bell Labs)的Unix团队,和Plan 9操作系统计划的成员。他与Thompson共事多年,并共创出广泛使用的UTF-8字元编码。 Robert Griesemer:曾协助制作Java的HotSpot编译器,和Chrome浏览器的JavaScript引擎V8。 Russ Cox:Plan 9开发者 Ian Taylor:曾改善已广泛使用之开源码编译器GCC 主要的开发者 : 肯.汤姆逊(Ken Thompson):图灵奖得主,Uinx发明人,B语言作者(C语言前身),还做飞行员,后来被谷歌挖走。 罗布.派克(Rob Pike):Unix团队和Plan 9操作系统计划的成员,与Ken老爷子共事多年,并共创出广泛使用的UTF-8 字元编码。 罗伯特.格里泽默(Robert Griesemer)

实序列快速傅里叶变换(一)

做~自己de王妃 提交于 2019-12-02 11:06:36
一、功能 计算实序列的快速傅里叶变换。 二、方法简介 实序列 \(x(n)\) 的离散傅立叶变换为 \[ X(k)=\sum_{n=0}^{N-1}x(n)W_{N}^{nk} \ , \ k=0,1,...,N-1 \] 上式可用复序列FFT算法进行计算。但考虑到 \(x(n)\) 是实数,为进一步提高计算效率,需要对按时间抽取的基2复序列FFT算法进行一定的修改。 如果序列 \(x(n)\) 是实数,那么其傅立叶变换 \(X(k)\) 一般是复数,但其实部是偶对称,虚部是奇对称,即 \(X(k)\) 具有如下共辄对称性: \(X(0)\) 和 \(X(N/2)\) 都是实数,且有 \[ X(k)=X^{*}(N-k) \ , \ 1 \leqslant k \leqslant \frac{N}{2} - 1 \] 在计算离散傅立叶变换时,利用这种共辄对称性,我们就可以不必计算与存储 \(X(k)(N/2 + 1 \leqslant k \leqslant N — 1)\) 以及 \(X(0)\) 和 \(X(N/2)\) 的虚部,而仅需计算 \(X(0)\) 到 \(X(N/2)\) 即可。此处我们选择的是计算 \(X(0)\) 到 \(X(N/4)\) 和 \(X(N/2)\) 到 \(X(3N/4)\) , 这样做可以恰好利用复序列FFT 算法的前 \((N/4)+1\)