数组公式

matlab考试重点详解

谁说我不能喝 提交于 2020-02-06 09:56:22
  此帖是根据期末考试复习重点补充完成, 由于使用word编辑引用图片和链接略有不便, 所以开此贴供复习及学习使用。侵删 复习要点 第一章 Matlab的基本概念,名称的来源,基本功能,帮助的使用方法 1.基本概念和名称来源: MATLAB [1] 是美国 MathWorks 公司出品的商业 数学软件 , 用于算法开发、数据可视化、数据分析以及 数值计算 的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是matrix&laboratory两个词的 组合 ,意为矩阵工厂(矩阵实验室) 2.基本功能:   2.1数值计算和符号计算功能   MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。   2.2绘图功能,matlab提供了两个层次的绘图操作。一种是对图形句柄,进行底层绘图操作。另一种是建立在低层绘图操作之上的高层绘图操作。   2.3编程语言   MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高   2.4MATLAB工具箱   MATLAB包含两部分内容:基本部分和各种可选的工具箱。   MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。 3.帮助的使用方法   3.1 帮助命令   MATLAB帮助命令包括help命令和lookfor命令。

机器学习实战(五)逻辑回归实战篇之预测病马死亡率 (Peter Harrington著)

风格不统一 提交于 2020-02-02 07:51:07
一 前言 本文对梯度上升算法和改进的随机梯度上升算法进行了对比,总结了各自的优缺点,并对sklearn.linear_model.LogisticRegression进行了详细介绍。 二 改进的随机梯度上升算法 梯度上升算法在每次更新回归系数(最优参数)时,都需要遍历整个数据集。可以看一下我们之前写的梯度上升算法: def gradAscent(dataMatIn, classLabels): dataMatrix = np.mat(dataMatIn) #转换成numpy的mat labelMat = np.mat(classLabels).transpose() #转换成numpy的mat,并进行转置 m, n = np.shape(dataMatrix) #返回dataMatrix的大小。m为行数,n为列数。 alpha = 0.01 #移动步长,也就是学习速率,控制更新的幅度。 maxCycles = 500 #最大迭代次数 weights = np.ones((n,1)) for k in range(maxCycles): h = sigmoid(dataMatrix * weights) #梯度上升矢量化公式 error = labelMat - h weights = weights + alpha * dataMatrix.transpose() * error

数据结构之数组

守給你的承諾、 提交于 2020-01-30 11:10:54
数据结构的分类 数据结构按照数据的排列特点可以分为线性表和非线性表。 线性表:数据排成一排,像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。比如数组、链表、队列,栈等。 非线性表:数据之间并不是简单的前后关系。比如:树、图,堆等。 数组的定义 数组是一种很常见的数据结构,我们学习的没门语言都会涉及。那么数组又是怎样定义的呢? 数组(Array)是一种线性表数据结构。它用连续的内存空间,来存储一组具有相同类型的数据。 数组的特性 支持随机访问。高效的查找,低效的插入和删除。 我们先来看插入操作。 假如数组的长度为n,现在,如果我们需要将一个数据插入到数组中的第k个位置。为了把第k个位置腾出来,给新的数据,我们需要将第k~n这部分的元素都顺序地往后挪一位。那插入操作的时间复杂度是多少呢? 如果在数组的末尾插入元素,那就不需要移动数据了,这个时候的时间复杂度为O(1)。但如果在数组的开头插入元素,那所有的数据都要一次往后移动一位,所以最坏时间复杂度是O(n)。因为每个位置插入元素的概率是一样的,所以平均情况时间复杂度为(1+2+…+n)/n=O(n)。 如果数组中的数据是有序的,我们在某个位置插入一个新的元素时,就必须按照刚才的方法搬移k之后的数据。但是如果数组中存储的数据没有任何规律,数组就只是一个存储数据的集合。在这种情况下,如果要将某个数据插入到第k个位置

C语言初阶——4.扩展:数组

…衆ロ難τιáo~ 提交于 2020-01-30 10:04:58
C语言初阶——4.扩展:数组 1. 返回值含义 返回值有时存在两种情况:合法值和非法值。 如果有非法值的情况,通常使用一些特定的值指代特殊情况。例如:数组下标只能是0和正数。我们实现数组查找元素下标时,存在找不到元素的情况,这时,使用 -1 可以作为这种情况的返回值。 返回值的含义以及值是人为定义的。 2. 二维数组指针用法 一维数组指针用法 No. 操作 下标 指针 1 第 i 个元素值 arr[i] *(arr+i) 2 第 i 个元素地址 &arr[i] arr+i 二维数组指针用法 No. 操作 下标 指针 1 第 i 行第 j 列元素值 arr[i][j] *(*(arr+i)+j) 2 第 i 行第 j 列元素地址 &arr[i][j] *(arr+i)+j 在二维数组中 a[i] 就是一个一维数组。 问题 二维数组数组名是第一个元素的首地址吗? 试一下下面的代码 # include <stdio.h> int main ( ) { int days [ 4 ] [ 3 ] = { 31 , 28 , 31 , 30 , 31 , 30 , 31 , 31 , 30 , 31 , 30 , 31 } ; printf ( "days[0]\t\t = %p\n&days[0][0]\t = %p\n" , days [ 0 ] , & days [ 0 ] [ 0 ]

Python 简单入门指北(一)

↘锁芯ラ 提交于 2020-01-30 08:50:45
Python 简单入门指北(一) Python 是一门非常容易上手的语言,通过查阅资料和教程,也许一晚上就能写出一个简单的爬虫。但 Python 也是一门很难精通的语言,因为简洁的语法背后隐藏了许多黑科技。本文主要针对的读者是: 毫无 Python 经验的小白 有一些简单 Python 经验,但只会复制粘贴代码,不知其所以然的读者 觉得单独一篇文章太琐碎,质量没保证,却没空读完一本书,但又想对 Python 有全面了解的读者 当然, 用一篇文章来讲完某个语言是不可能的事情,我希望读完本文的读者可以: 对 Python 的整体知识结构形成初步的概念 了解 Python 特有的知识点,比如装饰器、上下文、生成器等等,不仅会写 Demo,还对背后的原理有一定了解 避免 C++/Java 等风格的 Python 代码,能够写出地道的 Python 代码 能够熟练的使用 Python 编写脚本实现日常的简单需求,能够维护小型 Python 项目,能够阅读较复杂的 Python 源码 如果以上介绍符合你对自己的定位,在开始阅读前,还需要明确几点: 本文不会只介绍用法,那样太肤浅 本文不会深入介绍某个知识点,比如分析源码等,那样太啰嗦,我希望做一名引路人,描述各个知识点的概貌并略作引申,为读者指出下一步的研究方向 代码注释非常重要,一定要看,几乎所有的代码段都可以执行,强烈建议手敲一遍! 0.

剑指offer(51-59题)详解

ぃ、小莉子 提交于 2020-01-29 09:41:22
文章目录 51 构建乘积数组 52 正则表达式匹配 53 表示数值的字符串 54 字符流中第一个不重复的字符 55 链表中环的入口节点 56 删除链表中重复节点 57 二叉树的下一个节点 58 对称的二叉树 59 按之字形顺序打印二叉树 欢迎关注个人 数据结构专栏 哈 微信公众号: bigsai 声明:大部分题基本未参考题解,基本为个人想法,如果由效率太低的或者错误还请指正! 51 构建乘积数组 题目描述 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素 B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1] 。不能使用除法。 思路 : 这题刚开始还没想到,刚开始还想着用啥位运算?刚开始想着怎么用总数变成对应的数,但是人家要求不能用除法。得用乘法。( 不要按照公式每个每个的死算,这样太低效 )。其实把上面等式右侧看成两部分就行了。 A[0]*A[1]*...*A[i-1] 和 A[i+1]*...*A[n-1] 。 在具体处理上,我们使用两个数组,一个数组 leftmut[] 记录 从左向右的叠乘 ,一个数组 rightmut[] 记录 从右向左的叠乘 。这样正常情况下每个位置的 B[i] 就变成了 leftmut[i-1]*rightmut[i+1] .当然,特殊情况和边界需要特殊考虑下! 实现代码为:

算法导论第7章习题

纵然是瞬间 提交于 2020-01-26 00:34:46
做题要猜出题目的意图。 7.1-1 略 7.1-2 r-1, add if q=r-1, then $q = \lfloor (p+r)/2 \rfloor$。这说明元素全都一样的时候,quicksort伤不起。worst-case了,要$\Theta(n^2)$了。快排弱点1. 7.1-3 pivot要比较所有的数组元素,自然是n 7.1-4 PARTITION中Line4的<= changed to >= 7.2-1 T(n)=T(n-1)+\Theta(n)=T(0)+n*\Theta(n)=\Theta(n^2) 7.2-2 同7.1-2 7.2-3 These exercises demonstrate the weakness of the original quicksort. It’s the worst case. T(n) = T(n-1)+\Theta(n)=\Theta(n^2)。快排弱点2. 7.2-4 银行喜欢时间排序,用户喜欢支票号排序。这道题又说明了在nearly sorted list中,插入排序beat了快排。快排弱点3.因为用户使用多张支票是连号的,所以在一个时间段内,顶多是这几张支票打乱了顺序。而不是一天24小时之内所有的支票全部乱序。所以这个序列是差不多有序的。如果n个用户每次使用k张支票,插入排序最多需要O(nk)时间,如果k=1

折半查找(二分)法

。_饼干妹妹 提交于 2020-01-25 11:12:08
折半查找法:从数组的中间元素开始,如果中间元素正好等于要查找的元素,则搜索过程结束;如果要查找的元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟开始一样从中间元素开始比较。如果在某一步骤数组为空,则代表找不到。 注意折半查找要求数组是有序的。 现在有如下数组: 如果要使用折半查找法那么我们应该先将数组排序,在这里我们可以用Arrays类里面的sort方法。 排序后: 假设我们要查找元素7,那么我们第一步找到的中间元素为:array[3]【下标(max+min)/2】 我们可以发现要找的元素7>中间元素4,因此我们可以只关注右边,左边的元素可以忽略它们。 接下来我们需要找下次查找的中间元素,因为我们只需要关注右边的元素,所以我们可以讲min向右边移动 通过公式求得中间元素mid=(min+max)/2=5(5为下标) 可见需要找的元素7还是比mid的值大,因此还需要继续关注右边继续移动mid 这次我们可以发现终于找到我们需要找的元素啦!!! 这就是折半的过程啦嘻嘻嘻!! 代码如下: import java . util . Arrays ; public class HalfSearch { public static void main ( String [ ] args ) { int array [ ] = { 1 , 4 , 2 , 3 , 6 ,

使用JAVA数组实现顺序栈

自作多情 提交于 2020-01-24 08:16:59
1,中缀表达式的定义及为什么要将中缀表达式转换为后缀表达式? 中缀表达式(中缀记法) 中缀表达式是一种通用的算术或逻辑公式表示方法,操作符以中缀形式处于操作数的中间。中缀表达式是人们常用的算术表示方法。 虽然人的大脑很容易理解与分析中缀表达式,但对计算机来说中缀表达式却是很复杂的,因此计算表达式的值时,通常需要先将中缀表达式转换为前缀或后缀表达式,然后再进行求值。对计算机来说,计算前缀或后缀表达式的值要比中缀表达式简单。 比如,计算机计算后缀表达式的过程如下---- 后缀表达式的计算机求值: 从左至右扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(次栈顶元素 op 栈顶元素),并将结果入栈;重复上述过程直到表达式最右端,最后运算得出的值即为表达式的结果。 例如后缀表达式“3 4 + 5 × 6 -”: (1) 从左至右扫描,将3和4压入堆栈; (2) 遇到+运算符,因此弹出4和3(4为栈顶元素,3为次顶元素,注意与前缀表达式做比较),计算出3+4的值,得7,再将7入栈; (3) 将5入栈; (4) 接下来是×运算符,因此弹出5和7,计算出7×5=35,将35入栈; (5) 将6入栈; (6) 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。 2, 中缀表达式转换为后缀表达式算法:

《算法导论》笔记 第7章 总结与思考

我们两清 提交于 2020-01-23 11:43:43
【思考题】 7-1 Hoare 划分的正确性 a) 说明 HOARE-PARTITION 算法在数组 A = <13, 19, 9, 5, 12, 8, 7, 4, 11, 2, 6, 21> 上的运行过程, 并说明在第 4~11 行中 while 循环的每一轮迭代后,数组中各元素的之和辅助值的情况。 p=1, r=12 [i=0] 13 19 9 5 12 8 7 4 11 2 6 21 [j=13] 6 [i=1] 19 9 5 12 8 7 4 11 2 [j=11] 13 21 6 2 [i=2] 9 5 12 8 7 4 11 [j=10] 19 13 21 i=10, j=9 return j = 9 b) 下标i和j满足这样的特点,即我们从不会访问数组A的、在子数组A[p..r]之外的元素。 第一次迭代后,若i与j相同,则只有 A[i] = A[j] = x = A[p] 一种情况,直接返回j。 若i与j不相同,则交换A[i] A[j],而在之后某次导致i>=j的迭代中,i至少会被之前的值为A[i]的元素拦截下来,同理,j也会被过去的A[j]拦截而不会越界。之后迭代结束返回j。 因此,不会访问到子数组之外的元素。 c) 当过程 HOARE-PARTITION 结束时,他返回的j值满足p<=j<r。 注意到只有 i>=j 时过程结束,每次迭代,i至少+1,j至少-1。