赞
踩
进程和线程的关系:
(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。
(3)处理机分给线程,即真正在处理机上运行的是线程。
(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.
进程与线程的区别:
(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
(2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行
(3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.
(4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
1、先来先服务调度算法FCFS
(1)按照作业提交,或进程变为就绪状态的先后次序分派CPU;
(2)新作业只有当当前作业或进程执行完或阻塞才获得CPU运行
(3)被唤醒的作业或进程不立即恢复执行,通常等到当前作业或进程出让CPU。(所以,默认即是非抢占方式)
(4)有利于CPU繁忙型的作业,而不利于I/O繁忙的作业(进程)。
2、短作业(进程)优先调度算法SJF(非抢占)/SPF(抢占)
(1)平均周转时间、平均带权周转时间都有明显改善。SJF/SPF调度算法能有效的降低作业的平均等待时间,提高系统吞吐量。
(2)未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程)的及时处理、对长作业的不利、作业(进程)的长短含主观因素,不一定能真正做到短作业优先。
3、高优先权优先调度算法HPF
(1)两种方式:非抢占式优先权算法、抢占式优先权算法(关键点:新作业产生时)
(2)类型:静态优先权:创建进程时确定,整个运行期间保持不变。动态优先权:创建进程时赋予的优先权可随进程的推进或随其等待时间的增加而改变。
4、基于时间片的轮转调度算法RR
(1)时间片轮转算法
过程:1、排成一个队列。2、每次调度时将CPU分派给队首进程。3、时间片结束时,发生时钟中断。4、暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前就绪的队首进程。
说明:1、进程阻塞情况发生时,未用完时间片也要出让CPU。2、能够及时响应,但没有考虑作业长短等问题。3、系统的处理能力和系统的负载状态影响时间片长度。
(1)互斥条件(mutual exclusion):资源不能被共享,只能由一个进程使用;
(2)请求与保持条件(hold and wait):进程已获得了一部分资源,但因请求其它资源被阻塞时,对已获得的资源保持不放;
(3)不可抢占条件(no pre-emption):有些系统资源是不可抢占的,当某个进程已获得这种资源后,系统不能强行收回,只能进程使用完时自己释放;
(4)循环等待条件(circular wait):若干个进程形成环形链,每个都占用对方申请的下一个资源。
自己总结:有个人很霸道,拿了东西就不肯还(请求保持),别人还不能抢(不可抢),又不肯和别人共享(互斥),造成了死循环(循环等待)。
7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1
最佳(Optimal)置换算法:
最佳置换算法是由Belady于1966年提出的一种理论上的算法。其所选择的被淘汰页面,将是以后永不使用的,或是在最长(未来)时间内不再被访问的页面。采用最佳置换算法,通常可保证获得最低的缺页率。
但由于人们目前还无法预知一个进程在内存的若干个页面中,哪一个页面是未来最长时间内不再被访问的,因而该算法是无法实现的,但可以利用该算法去评价其它算法。
先进先出(FIFO)页面置换算法:
这是最早出现的置换算法。该算法总是淘汰最先进入内存的页面,即选择在内存中驻留时间最久的页面予以淘汰。
该算法实现简单,只需把一个进程已调入内存的页面,按先后次序链接成一个队列,并设置一个指针,称为替换指针,使它总是指向最老的页面。
但该算法与进程实际运行的规律不相适应,因为在进程中,有些页面经常被访问,比如,含有全局变量、常用函数、例程等的页面,FIFO算法并不能保证这些页面不被淘汰。
最近最久未使用(LRU)置换算法:
LRU(Least Recently Used)置换算法的描述:
FIFO置换算法性能之所以较差,是因为它所依据的条件是各个页面调入内存的时间,而页面调入的先后并不能反映页面的使用情况。最近最久未使用(LRU)的页面置换算法,是根据页面调入内存后的使用情况进行决策的。由于无法预测各页面将来的使用情况,只能利用“最近的过去”作为“最近的将来”的近似,因此,LRU置换算法是选择最近最久未使用的页面予以淘汰。该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历的时间t,当须淘汰一个页面时,选择现有页面中其t值最大的,即最近最久未使用的页面予以淘汰。
先来先服务(FCFS,First Come First Served):
这是一种最简单的磁盘调度算法。它根据进程请求访问磁盘的先后次序进行调度。
此算法的优点是公平、简单,且每个进程的请求都能依次地得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。
最短寻道时间优先(SSTF,Shortest Seek Time First):
该算法选择这样的进程:其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。但这种算法不能保证平均寻道时间最短。
扫描(SCAN)算法:
一、冒泡排序:
1.基本思想:
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
2.排序过程:
设想被排序的数组R[1…N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
【示例】:
49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97
二、快速排序(Quick Sort)
1.基本思想:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据比另一部分的所有数据要小,再按这种方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,使整个数据变成有序序列。
2.排序过程:
【示例】:
初始关键字 [49 38 65 97 76 13 27 49]
第一次交换后 [27 38 65 97 76 13 49 49]
第二次交换后 [27 38 49 97 76 13 65 49]
J向左扫描,位置不变,第三次交换后 [27 38 13 97 76 49 65 49]
I向右扫描,位置不变,第四次交换后 [27 38 13 49 76 97 65 49]
J向左扫描 [27 38 13 49 76 97 65 49]
(一次划分过程)
初始关键字 [49 38 65 97 76 13 27 49]
一趟排序之后 [27 38 13] 49 [76 97 65 49]
二趟排序之后 [13] 27 [38] 49 [49 65]76 [97]
三趟排序之后 13 27 38 49 49 [65]76 97
最后的排序结果 13 27 38 49 49 65 76 97
三、简单选择排序
1.基本思想:
每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
2.排序过程:
【示例】:
初始关键字 [49 38 65 97 76 13 27 49]
第一趟排序后 13 [38 65 97 76 49 27 49]
第二趟排序后 13 27 [65 97 76 49 38 49]
第三趟排序后 13 27 38 [97 76 49 65 49]
第四趟排序后 13 27 38 49 [49 97 65 76]
第五趟排序后 13 27 38 49 49 [97 97 76]
第六趟排序后 13 27 38 49 49 76 [76 97]
第七趟排序后 13 27 38 49 49 76 76 [ 97]
最后排序结果 13 27 38 49 49 76 76 97
一、搜索方法:
沿出发顶点的第一条路径尽量深入,遍历路径上所有顶点;然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作。
简单来说,深度搜素算法就是一条道走到黑,走不动了再回溯回去,选择其他路径,举个例子,对于下面的图,假设从1开始遍历:
二、用途
深度搜索常用于解决图的遍历问题(尤其是矩阵图如迷宫问题等),比如求解从某一个点到另一个点的最短距离,则只需遍历所有路径,在遍历同时记录路径长度,最后一定能找到最短的距离,但这种方法复杂度较高,因为要遍历完所有结点才能找到。
深度搜索是回溯法的主要方法,沿着一条路一直走,走不通再回溯到上一节点,选择其他路径。
一、搜索方法
广度搜索,顾名思义,就是更大范围内搜索,与深度搜索不同的是,深度搜索是一次搜索一条路径,一直搜索到走不通为止;而广度搜索是同时搜索所有路径,相当于一层一层地搜索,就好比波浪的扩展一样。此搜索方法跟树的层次遍历类似,因此宽度搜索一般都用队列存储结构。搜索原则:
(1)访问遍历出发顶点,该顶点入队
(2)队列不空,则队头顶点出队;
(3)访问出队顶点所有的未访问邻接点并将其入队;
(4)重复(2)(3),直到队空或者找到目标点
举个例子,还是对下面这个图进行广度遍历:
**类型:**无序查找。
基本思想:
从数据列中的一段开始(通常是起始位置),顺序扫描,依次比较所扫描数和目标值,如果相等则查找成功。若扫描结束仍没有找到那么就查找失败。
复杂度分析:
平均查找长度 | 时间复杂度 |
---|---|
(n+1)/2 | O(n) |
**类型:**有序查找。
基本思想:
用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表,若相等则查找成功;若不相等,再根据k与该中间结点关键字的比较结果确定下一步查找哪个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的结点。
复杂度分析:
平均查找长度 | 时间复杂度 |
---|---|
(log2(n+1) | O(log2n) |
**类型:**有序查找。
基本思想:
是二分查找的一种优化,将查找点改进为自适应选择以提高查找效率。(将mid = (low + high) /2取中值的取法换成了mid = low + (target - arr[low]) / (arr[high] - arr[low] * (high - low)))
复杂度分析:
平均查找长度 | 时间复杂度 |
---|---|
(n+1)/2 | O(n) |
**类型:**有序查找。
**斐波那契数列:**相信很多同学都早已有所耳闻,即1,1,2,3,5,8,13…,从第三个数开始,后面的数都等于前两个数之和,而斐波那契查找就是利用的斐波那契数列来实现查找的。
基本思想:
同样的是,它是二分查找的一个优化,它是根据斐波那契序列的特点对有序表进行分割。他要求开始表中记录的个数为某个斐波那契数小1,及n=F(k)-1;然后需要装填一个长度为n的新数组,且mid = low + fib(k - 1) - 1,k为fib(k) - 1刚好大于原数组长度的那个值。
复杂度分析:
平均查找长度 | 时间复杂度 |
---|---|
* | O(log2n) |
机器学习的基本思路:
无论使用什么算法,使用什么样的数据,最根本的思路都逃不出上面的3步:
机器学习在实际操作层面一共分为7步:
1. 线性回归
优点:
缺点:
不能很好地拟合非线性数据。所以需要先判断变量之间是否是线性关系。
为什么在深度学习大杀四方的今天还使用线性回归呢?
一方面,线性回归所能够模拟的关系其实远不止线性关系。线性回归中的“线性”指的是系数的线性,而通过对特征的非线性变换,以及广义线性模型的推广,输出和特征之间的函数关系可以是高度非线性的。另一方面,也是更为重要的一点,线性模型的易解释性使得它在物理学、经济学、商学等领域中占据了难以取代的地位。
线性回归和逻辑回归是 2 种经典的算法。经常被拿来做比较,下面整理了一些两者的区别:
注:
自变量:主动操作的变量,可以看做「因变量」的原因
因变量:因为「自变量」的变化而变化,可以看做「自变量」的结果。也是我们想要预测的结果。
线性回归的位置如下图所示,它属于机器学习 – 监督学习 – 分类 – 逻辑回归。
**逻辑回归(Logistic Regression)**主要解决二分类问题,用来表示某件事情发生的可能性。
比如:
逻辑回归的优缺点
优点:
缺点:
决策树是一种解决分类问题的算法;
决策树算法采用树形结构,使用层层推理来实现最终的分类。决策树由下面几种元素构成:
预测时,在树的内部节点处用某一属性值进行判断,根据判断结果决定进入哪个分支节点,直到到达叶节点处,得到分类结果。
这是一种基于 if-then-else 规则的有监督学习算法,决策树的这些规则通过训练得到,而不是人工制定的。
决策树是最简单的机器学习算法,它易于实现,可解释性强,完全符合人类的直观思维,有着广泛的应用。
特征选择决定了使用哪些特征来做判断。在训练数据集中,每个样本的属性可能有很多个,不同属性的作用有大有小。因而特征选择的作用就是筛选出跟分类结果相关性较高的特征,也就是分类能力较强的特征。
在特征选择中通常使用的准则是:信息增益。
- 决策树生成
选择好特征后,就从根节点触发,对节点计算所有特征的信息增益,选择信息增益最大的特征作为节点特征,根据该特征的不同取值建立子节点;对每个子节点使用相同的方式生成新的子节点,直到信息增益很小或者没有特征可以选择为止。
- 决策树剪枝
剪枝的主要目的是对抗“过拟合”,通过主动去掉部分分支来降低过拟合的风险。
决策树的优缺点:
优点
缺点
优点
缺点
机器学习根据训练方法大致可以分为3大类:
监督学习
监督学习是指我们给算法一个数据集,并且给定正确答案(标签)。机器通过数据来学习正确答案的计算方法。
这种通过大量人工打标签来帮助机器学习的方式就是监督学习。这种学习方式效果非常好,但是成本也非常高。
非监督学习
非监督学习中,给定的数据集没有“正确答案”,所有的数据都是一样的。无监督学习的任务是从给定的数据集中,挖掘出潜在的结构。
非监督学习中,虽然照片分为了猫和狗,但是机器并不知道哪个是猫,哪个是狗。对于机器来说,相当于分成了 A、B 两类。
强化学习
强化学习更接近生物学习的本质,因此有望获得更高的智能。它关注的是智能体如何在环境中采取一系列行为,从而获得最大的累积回报。通过强化学习,一个智能体应该知道在什么状态下应该采取什么行为。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。