计算机基础
An宁
未来很近,时间很短,珍惜每一个呼吸的瞬间
展开
-
数据结构--知识点17--堆排序
文章目录1、堆排序2、堆排序的基本思想和步骤3、python实现1、堆排序堆是具有以下性质的完全二叉树:每个节点的值都大于或等于其左右孩子节点的值,称为大顶堆;或者每个节点的值都小于其左右孩子的值,称为小顶堆。堆排序是利用堆这种数据结构而设计的一种排序算法,它的最坏、最好、平均时间复杂度的都是O(nlogn),也是不稳定排序。2、堆排序的基本思想和步骤无序序列—>大顶堆---->从小到大排序的序列构造初始堆,将给定无序序列构造成一个大顶堆按照完全二叉树,从左到右,从下到上的顺序原创 2020-09-15 19:36:10 · 243 阅读 · 0 评论 -
数据结构--知识点16--搜索算法(二叉树)
文章目录一、树的概念1、特点2、树的术语3、树的种类4、树的存储与表示5、常见的树的应用场景二、二叉树1、概念2、性质一、树的概念树是一种抽象数据类型(ADT)或是视作这种抽象数据类型的数据结构1、特点每个节点有零个或多个子节点没有父节点的节点称为根节点每一个非根节点有且只有一个父节点除了根节点外,每个子节点可以分为**多个不相交(因为都只有一个父节点)**的子树2、树的术语节点的度:一个节点含有的子树的个数称为该节点的度树的度:一棵树中,最大的节点的度称为树的度叶节点或终端节点原创 2020-09-06 22:37:57 · 2922 阅读 · 2 评论 -
数据结构--知识点15--搜索算法(二分查找)
文章目录1、搜索2、二分法查找1)条件2)算法3)python实现4)时间复杂度1、搜索搜索是在一个项目集合中找到一个特定项目的算法过程。搜索通常的答案是真的或假的。搜索的几种常见方法:顺序查找、二分法查找、二叉树查找、哈希查找2、二分法查找1)条件排好序的序列上进行有索引的序列上进行即顺序表–在python中为列表2)算法假设查找[1,3,4,6,7,8,10,13,14]列表中是否有元素4首先由于是有顺序的序列,因此先找中间值是多少,即序列长度除以2–索引为4的为中间值原创 2020-09-06 17:15:36 · 213 阅读 · 0 评论 -
数据结构--知识点14--常见排序算法效率比较
文章目录1、效率比较2、必须掌握1、效率比较排序方法平均情况最好情况最坏情况辅助空间稳定性冒泡排序O(n2)O(n)O(n2)O(1)稳定选择排序O(n2)O(n2)O(n2)O(1)不稳定插入排序O(n2)O(n)O(n2)O(1)稳定希尔排序O(nlogn)~O(n2)O(n1.3)O(n2)O(1)不稳定堆排序O(nlogn)O(nlogn)O(nlogn)O(1)不稳定归并排序O(nlo原创 2020-09-06 16:00:25 · 172 阅读 · 0 评论 -
数据结构--知识点13--归并排序
文章目录1、 定义1、 定义先拆分再合并拆分时按照先对半,再将分出的子序列对半,以此类推,直到分为单个的元素合并时,先两两合并,合并的同时,将这两个元素排序再将合并后的序列们两两合并,合并时有两个游标,left、right,left指向左边序列的第一个元素,right指向右边序列的第一个元素,首先比较这两个元素的大小,如果左边小于右边,则将左边的元素放到合并的序列中的第一位,向右移动left一位,如果右边的更小,则将右边的元素放在合并的序列中的第一位,right游标向右移一位,继续比较两个游原创 2020-09-05 23:47:14 · 186 阅读 · 0 评论 -
数据结构--知识点12--快速排序
文章目录1、定义2、python实现3、时间复杂度1、定义理解:首先将第一个元素找出来,然后设置low、high两个游标,分别从两边开始向第一个元素靠近;假设首先移动low游标,如果游标指向的元素比当前元素小,继续向右移动,如果游标指向的元素比当前元素大,则停止,交换low游标所指的元素和high游标所指的元素;开始移动high游标,比较游标指向的元素和当前元素的大小,如果比当前元素大,则继续向左移动游标,如果比当前元素小,则停止,交换low游标所指的元素和high游标所指的元素;再移动low原创 2020-09-05 18:09:05 · 218 阅读 · 0 评论 -
数据结构--知识点11--希尔排序
文章目录1、定义2、python实现3、时间复杂度1、定义是插入排序的改进版首先选取一个间隔,假设为4,则从原序列中,从0索引开始,下一个选4索引,再选8索引组成一个新的序列;1索引、5索引、9索引。。。组成一个新序列,以此类推,将所有元素组成新的序列。然后每个序列使用插入算法,进行排序,排序后,将排过的序列按照索引放回原来的大序列中;再按照间隔为2的方式取元素,组成新序列;在新序列中再按照插入法进行排序,排好后再将这个序列中的元素按照索引放入原来的大序列中;这时将间隔调整为1,这时就只分为原创 2020-09-05 14:27:48 · 277 阅读 · 0 评论 -
数据结构--知识点10--插入算法
文章目录1、定义1、定义对一个序列进行从小到大排序,将这个序列分为有序序列和无序序列,首先将第一个元素放入有序序列,剩下的都属于无序序列;然后选择无序序列中第一个与有序序列中的比较,如果小则放前面,大则放后面;然后这两个排好序的为有序序列,剩下的为无序序列,再在无序序列中选择第一个,插入有序序列中的合适位置;以此类推,一个个将剩下的元素插入有序序列中,最后得到一个有序序列。其中插入时,先从有序序列的最后一个进行比较,一个个向前比较。...原创 2020-09-04 23:51:14 · 1007 阅读 · 0 评论 -
数据结构--知识点9--选择排序
文章目录1、定义1)理解2)工作原理2、python实现时间复杂度1、定义1)理解从整个序列中选择最小的放在最前面,再在选剩下的元素序列中选择最小的放在第二个位置,按照这个方法排序那么如何选择最小的元素?首先设0索引的为最小的,然后与之后的元素一个个比较,当遇到比当前元素小的元素时,将当前元素替换为更小的那个,直到将所有元素遍历完,这是0索引位置的为最小的元素;将这个元素放在已排序好的元素区然后在未排序的元素区中设1索引的元素为最小的,相同的方法寻找最小值;直到将所有元素都排好2)工作原理原创 2020-09-04 22:27:30 · 199 阅读 · 0 评论 -
数据结构--知识点8--冒泡排序
文章目录一、排序算法的稳定性二、排序算法--冒泡排序1、定义2、python实现一、排序算法的稳定性稳定性:如果一个排序算法是稳定的,当有两个相等键值的记录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前比如:假设以下的数对将要以他们的第一个数字来排序(4,1) (3,1) (3,7) (5,6)在这个状况下,有可能产生两种不同的结果,一个是让相等键值的记录维持相对的次序,另一个则没有维持次序:(3,1)(3,7)(4,1)(5,6)次序被改变:(3,7)(3原创 2020-09-04 11:30:42 · 273 阅读 · 0 评论 -
数据结构--知识点7--栈和队列
文章目录一、栈1、定义2、特点3、栈结构实现1)栈的操作2)python实现二、队列1、定义2、特点对于栈和队列:不用关心物理存放是什么样的,只需要关心这两种数据结构支持什么样的操作,操作有什么特点一、栈1、定义栈,可以利用任意一种线性表来实现,是一种数据结构,用来保存线性数据,可以存入数据、访问数据、删除数据。2、特点栈数据结构只允许在容器的一端进行加入数据和输出数据,因此对数据的访问顺序为后进先出(LIFO,Last In First Out)[可以链表,也可以顺序表]3、栈结构实现栈原创 2020-09-03 21:32:52 · 213 阅读 · 0 评论 -
数据结构--知识点6--单向循环链表
文章目录1、概念2、操作3、python实现操作1、概念单向循环链表是单链表的一个变型,链表最后的一个节点的next域不再为None,而是指向链表的头节点2、操作is_empty() 判断链表是否为空length() 返回链表的长度tracel() 遍历add(item) 在头部添加一个节点append(item) 在尾部添加一个节点insert(pos,item) 在指定位置pos添加节点remove(item) 删除一个节点search(item) 查找结点是否存在3、py原创 2020-09-02 23:29:14 · 287 阅读 · 0 评论 -
数据结构--知识点5--链表与顺序表的对比
文章目录1、优缺点对比2、操作复杂度对比1、优缺点对比链表对于存储空间的使用相对灵活;且由于增加了节点的指针域,空间开销比较大优点:对分散的存储空间可以利用起来,缺点:但是由于添加了节点的next域,空间开销会大一些在进行存取数据时,由于需要遍历整个链表,时间复杂度达不到O(1)顺序表具有随机读取的优点,空间开销小优点:即在存取元素的时候可以一次性定位缺点:但是存储数据时必须是一块连续的固定的存储空间,如果进行动态改变,整个存储区都会改变,如果存原创 2020-09-02 22:03:33 · 304 阅读 · 0 评论 -
数据结构--知识点4--链表
文章目录一、链表的概念1、为什么需要链表2、链表的定义二、单向链表1、单链表的定义2、python中的变量赋值3、单链表在python中的实现1)节点的操作2)单链表的操作3)测试代码是否符合操作一、链表的概念1、为什么需要链表顺序表的构建需要预先指导数据大小来申请连续的存储空间,在进行扩充时还需要进行数据的搬迁,所以使用起来不是很方便链表结构可以充分利用计算机的内存空间,实现灵活的内存动态管理链表和顺序表都是线性表2、链表的定义链表是一种常见的基础数据结构,是一种线性表,但是不像顺序表一原创 2020-09-01 22:38:43 · 411 阅读 · 0 评论 -
数据结构--知识点3--顺序表
文章目录一、概念一、概念原创 2020-08-30 22:43:48 · 693 阅读 · 0 评论 -
数据结构--知识点2--数据结构概述
文章目录1、引入1、引入算法: 一种思想,一种解决问题的思路,关注于解决问题的方法和步骤数据结构:用什么方式将数据存储起来,不同的组织方式,到时候操作数据时的时间复杂度不同比如: 存储一个班级学生的姓名、年龄、家乡列表中每个学生的信息用字典存储,需要取出Tom的信息时,时间复杂度为O(n)...原创 2020-08-30 21:13:56 · 146 阅读 · 0 评论 -
数据结构--知识点1--时间复杂度
文章目录一、时间复杂度1、概念2、大O表示法3、最坏时间复杂度4、时间复杂度的基本计算规则5、最常见的时间复杂度6、常见时间复杂度之间的关系二、python内置类型性能分析1、timeit模块2、创建list实例不同列表创建方法的时间3、python内置操作的时间复杂度1)list内置操作2)dict内置操作一、时间复杂度1、概念一个算法的时间复杂度根据算法执行的基本运算数量来衡量实例解析import timestart_time=time.time()for a in range(0,100原创 2020-08-30 20:21:16 · 434 阅读 · 0 评论 -
操作系统--实例5(实现支持异步任务的线程池)
文章目录一、背景介绍二、python的同步原语1、互斥量2、条件变量三、实现线程安全的队列Queue1、队列2、实现线程安全的队列的功能3、什么会影响线程安全4、编程实现四、实现基本任务对象Task五、线程池简介六、实现任务处理线程Process Thread七、实现任务处理线程池Pool八、编写测试用例九、实现异步任务处理AsyncTask一、背景介绍实现支持异步任务的线程池使用python3很多语言都提供了线程池Java:ThreadPoolExecutorPython3:ThreadP原创 2020-08-28 22:23:00 · 307 阅读 · 0 评论 -
操作系统--知识点总结2(进程管理、作业管理)
文章目录一、进程管理1、进程管理之进程实体1)为什么需要进程2)进程的实体i、主存中的进程形态a、 进程控制块存储的内容:b、进程控制块PCBii、进程与线程a、线程b、线程与进程2、进程管理之五状态模型1)简述2)就绪状态3、进程管理之进程同步4、Linux的进程管理二、作业管理1、作业管理之进程调度2、作业管理之死锁一、进程管理1、进程管理之进程实体1)为什么需要进程在没有进程出现时:没有配置OS之前,资源属于当前运行的程序配置OS之后,引入多道程序设计的理念使用进程可以合理的隔离资源、原创 2020-08-26 18:21:11 · 1266 阅读 · 0 评论 -
操作系统--知识点总结1(操作系统的演进、操作系统概览)
文章目录一、操作系统导学1、操作系统的演进1)无操作系统2)批处理系统3)分时系统2、多道程序设计1)概念2)操作系统对多道程序的管理i、五大功能二、操作系统概览1、What&Why1)什么是操作系统i 、不同操作系统2)为什么使用操作系统2、操作系统的基本功能1)功能一2)功能二3)功能三3、操作系统的相关概念1)并发性i、并行和并发ii、在计算机程序中的体现2)共享性i、概念ii、举例iii、资源共享方式3)虚拟性i、概念ii、时分复用技术iii、空分复用技术4)异步性一、操作系统导学1、操原创 2020-08-26 16:05:51 · 233 阅读 · 0 评论 -
操作系统--知识点总结4(线程同步、进程同步)
文章目录一、线程同步1、线程同步之互斥量2、线程同步之自旋锁3、线程同步之读写锁4、线程同步之条件变量5、线程同步方法总结二、进程同步1、进程同步之共享内存2、进程同步之Unix域套接字一、线程同步1、线程同步之互斥量2、线程同步之自旋锁3、线程同步之读写锁4、线程同步之条件变量5、线程同步方法总结二、进程同步1、进程同步之共享内存2、进程同步之Unix域套接字...原创 2020-08-26 14:28:14 · 538 阅读 · 0 评论 -
操作系统--知识点总结3(存储管理、文件管理、设备管理、Linux文件)
一、功能1、内存空间的分配与回收C语言在使用完内存够,需要程序员自己手动释放,但是其他不用,但是内存回收一定是存在的2、地址转换逻辑地址到物理地址的转换逻辑地址:我们认为它在的地址物理地址:实际上在的地址3、内存空间的扩充虚拟内存的应用4、存储保护防止内存地址越界二、装入模块放入内存方式1、绝对装入适合单道程序2、可重定位装入静态重定位,适合多道程序3、动态运行时装入动态重定位三、内存保护两种方式1、在CPU中设置一对上下寄存器在内存中设置两个边界,访问时只能在这两个原创 2020-08-21 23:15:16 · 2888 阅读 · 0 评论 -
操作系统--知识点总结0(进程管理)
文章目录一、进程1、进程1)概念2)组成3)特征4)状态2、进程控制3、进程的通信4、进程运行步骤1)编译程序2)链接程序3)装入程序4)举例二、线程1、特点2、实现方式3、引入目的三、调度1、调度的层次2、调度方式3、 评价指标4、调度算法四、进程同步1、临界2、进程同步3、进程互斥1)原则:2)实现方法i、软件**1、单标志法**:**违背空间让进原则****2、双标志法先检查:违背忙则等待原则****3、双标志法后检查:违背空闲让进、有限等待,出现饥饿现象****4、Peterson's(皮特森) 算原创 2020-08-20 23:45:32 · 435 阅读 · 0 评论 -
操作系统--知识点总结0(计算机系统概述)
文章目录一、OS特征1、并发2、共享3、虚拟4、异步二、不同时期发展三、操作系统提供接口1、命令接口2、程序接口四、CPU状态1、分类2、用户态->核心态五、操作系统内核1、时钟管理2、中断机制3、原语4、系统中的数据结构及处理六、系统调用七、体系结构一、OS特征1、并发并行:同一时刻同时进行,进程并行需要多处理器的支持并发:同一段时间内,多个进程都在向前推进;但是同一时刻,只有一个进程在执行,多个进程轮流使用处理器。2、共享没有并发就没有共享,没有共享就没有并发并发:在t时间段内,先执原创 2020-08-20 17:51:50 · 207 阅读 · 0 评论 -
计算机网络--知识点总结4(应用层)
文章目录一、应用层概述二、DNS详解1、域名2、域名服务器工作过程三、DHCP协议详解1、概念2、DHCP的作用1)**解决的问题:**2)实际问题说明:3、DHCP的工作步骤四、HTTP协议1、HTTP协议详解1)http协议是什么2)Web服务端2、HTTP工作的结构一、应用层概述四层协议中的应用层在TCP/IP七层协议中分为:应用层、表示层、会话层应用层工作在终端设备应用层以下的层提供完整的通信服务应用层是面向用户的一层面向传输层的协议也可以认为是应用层的UDP使用场景:用于多媒原创 2020-08-18 22:29:34 · 868 阅读 · 0 评论 -
计算机网络--知识点总结3(传输层)
一、传输层概述1、传输层的功能传输层主要工作在终端设备传输层:管理端到端的通信连接,解决跨设备跨网络的进程与进程之间的通信2、端口:使用端口(Port)来标记不同的网络进程端口使用16比特位表示(0~65535)FTPHTTP(网站)HTTPS(安全)DNSTELNET218044353233、协议协议呈现中间窄,两端大的沙漏形状二、UDP协议详解...原创 2020-08-17 19:33:55 · 893 阅读 · 0 评论 -
计算机网络--TCP/IP五层结构
文章目录TCP/IP五层协议1、物理层2、数据链路层数据报head | data数据报的具体内容head中包含的源和目标地址由来--mac地址TCP/IP五层协议根据功能不同分为OSI七层协议、TCP/IP四层协议(TCP/IP五层协议是为了介绍网络原理设计,实际应用仍然是四层协议)其中,OSI七层协议称为开放系统互连基本参考模型,是法律上的国际标准;但是最后被广泛使用的是TCP/IP四层协议;TCP/IP五层是为了方便网络原理分析,实际应用的让仍是四层协议。1、物理层物理层就是网线,交换原创 2020-07-22 21:38:28 · 6446 阅读 · 0 评论