算法与数据结构

运维岗位学习历程

依然范特西╮ 提交于 2020-01-13 01:20:20
面经链接: https://www.nowcoder.com/discuss/142474 运维岗位要求的知识面比较广,操作系统、计算机网络、linux、数据库、数据结构、常见的运维工具等等 1. 操作系统 2. 计算机网络 3. linux 4. 数据库 5. 数据结构 6. 算法设计与分析 7. 常见的运维工具 1. 系统监控工具 htop命令==》安装: 默认支持图像界面的鼠标操作; 可以横向或纵向滚动浏览进程列表,以便看到所有的进程和完成的命令行; 可以直接通过F9杀死进程。 $yum -u install htop (需要epel) 2. 多功能系统信息统计工具 dstat命令==》查看支持插件$ dstat --list # 常用参数 -l: 显示负载均衡统计量 相当于 uptime -m: 显示内存使用率(used,buffer,cache,free) -r: 显示I/0统计(read, write) -s: 显示交换分区使用情况(used, free) -t: 显示当前时间 --fs: 显示文件系统统计数据(files,inodes) --socket:显示网络统计数据(tot,tcp,udp,raw,frg) --tcp:显示常用的TCP统计(lis,act,syn,tim,clo) --udp: 显示监听的UDP接口及其当前用量的一些动态数据(lis,act)

数据结构之算法

六眼飞鱼酱① 提交于 2020-01-13 01:01:49
算法    算法 —— 对特定问题求解步骤的描述    特性: 输入——有0个或多个输入       输出——有1个或多个输出        有穷性       确定性       可行性 如何评价一个算法的好坏?        正确的       可读性高       时间效率高       存储空间小 算法时间复杂度 在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。算法的时间复杂度,也就是 算法的时间量度 ,记作:T(n) = O(f(n))。 它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为 时间复杂度 。其中f(n)是问题规模n的某个函数。 推导大O阶方法   1.   用常数取代运行时间中的所有加法常数。   2.   在修改后的运行次数函数中,只保留最高阶项。   3.   如果最高阶项存在且不是,则去除与这个项相乘的常数。得到的结果就是大O阶。 常见的时间复杂度如表:        来源: https://www.cnblogs.com/gaiyin/p/6871709.html

数据结构的基本知识、算法

老子叫甜甜 提交于 2020-01-13 01:01:03
数据结构的基本知识 下面的都是摘自《大话数据结构》书中的内容,记下来可以时时查看: 数据:描述客观事物的符号,计算机可以操作的对象; 数据元素:组成数据的有一定意义的基本单位,作为整体能被计算机处理;人是人类的数据元素,牛马是牲畜类的数据元素 数据项:组成数据元素,人的眼睛耳朵就是人这个数据元素的数据项; 注意:数据项是数据的最小单位,不过讨论问题时数据元素才是数据模型的着眼点。 数据对象:性质相同的数据元素的集合,数据的子集 数据结构:相互存在关系的数据元素的集合。 逻辑结构、物理结构 逻辑结构:是指数据对象中数据元素之间的相互关系 集合结构,线性结构,树形结构,图形结构 物理结构:是指数据的逻辑结构在计算机中的存储形式 顺序存储结构,把数据元素存放在地址连续的存储单元里 链式存储结构,数据元素存储在在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。数据元素的存储关系不能反应逻辑关系,因此需要一个指针存放数据元素的地址。 逻辑结构面向问题,物理结构面向计算机。 抽象数据类型 数据类型:一组性质相同的值的集合及定义在次集合上的一些操作的总称。 抽象数据类型:是指一个数学模型及定义在该模型上的一组操作。 一个抽象数据类型定义了:一个数据对象、数据对象中个数据元素之间的关系及对数据元素的操作。 抽象数据类型体现了程序设计中问题分解、抽象和信息隐藏的特性

4.基本数据结构-队列

烂漫一生 提交于 2020-01-12 20:05:01
4.基本数据结构-队列 一.队列 - 概念:队列是项的有序结合,其中添加新项的一端称为队尾,移除项的一端称为队首。当一个元素从队尾进入队列时,一直向队首移动,直到它成为下一个需要移除的元素为止。最近添加的元素必须在队尾等待。集合中存活时间最长的元素在队首,这种排序成为 FIFO,先进先出,也被成为先到先得。 - 案例:队列的最简单的例子是我们平时不时会参与的列。排队等待电影,在杂货店的收营台等待,在自助餐厅排队等待(这样我们可以弹出托盘栈)。行为良好的线或队列是有限制的,因为它只有一条路,只有一条出路。不能插队,也不能离开。你只有等待了一定的时间才能到前面。 - 队列的应用:我们的计算机实验室有 30 台计算机与一台打印机联网。当学生想要打印时,他们的打印任务与正在等待的所有其他打印任务“一致”。第一个进入的任务是先完成。如果你是最后一个,你必须等待你前面的所有其他任务打印。我们将在后面更详细地探讨这个有趣的例子。 除了打印队列,操作系统使用多个不同的队列来控制计算机内的进程。下一步做什么的调度通常基于尽可能快地执行程序和尽可能多的服务用户的排队算法。此外,当我们敲击键盘时,有时屏幕上出现的字符会延迟。这是由于计算机在那一刻做其他工作。按键的内容被放置在类似队列的缓冲器中,使得它们最终可以以正确的顺序显示在屏幕上。 二.Python实现队列 - 队列的抽象数据类型定义

前端学数据结构之栈

拥有回忆 提交于 2020-01-12 18:48:50
前面的话   学习数据结构和算法十分重要。首要原因是数据结构和算法可以很高效地解决常见问题,这对今后的代码质量至关重要(也包括性能,要是用了不恰当的数据结构或算法,很可能会产生性能问题)。其次,对于计算机科学,算法是最基础的概念。数组是计算机科学中最常用的数据结构,我们知道,可以在数组的任意位置上删除或添加元素。然而,有时候还需要一种在添加或删除元素时有更多控制的数据结构。有两种数据结构类似于数组,但在添加和删除元素时更为可控。它们就是栈和队列。本文将详细介绍栈 数据结构   栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的末尾,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。   在现实生活中也能发现很多栈的例子。例如,下图里的一摞书或者餐厅里堆放的盘子   栈也被用在编程语言的编译器和内存中保存变量、方法调用等 创建栈   下面将创建一个类来表示栈,先声明这个类: function Stack() { //各种属性和方法的声明 }   使用一种数据结构来保存栈里的元素。可以选择数组: let items = [];   接下来,为栈声明一些方法 push(element(s)):添加一个(或几个)新元素到栈顶 pop():移除栈顶的元素,同时返回被移除的元素 peek():返回栈顶的元素,不对栈做任何修改

20182318 2019-2020-1 《数据结构与面向对象程序设计》实验九报告

醉酒当歌 提交于 2020-01-12 13:48:01
20182318 2019-2020-1 《数据结构与面向对象程序设计》实验九报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 王振澳 学号:20182318 实验教师:王志强 实验日期:2019年12月2日 必修/选修: 必修 1.实验内容 初始化:根据屏幕提示(例如:输入1为无向图,输入2为有向图)初始化无向图和有向图(可用邻接矩阵,也可用邻接表),图需要自己定义(顶点个数、边个数,建议先在草稿纸上画出图,然后再输入顶点和边数)(2分) 图的遍历:完成有向图和无向图的遍历(深度和广度优先遍历)(4分) 完成有向图的拓扑排序,并输出拓扑排序序列或者输出该图存在环(3分) 完成无向图的最小生成树(Prim算法或Kruscal算法均可),并输出(3分) 完成有向图的单源最短路径求解(迪杰斯特拉算法)(3分) PS:本题12分。目前没有明确指明图的顶点和连通边,如果雷同或抄袭,本次实验0分。、 2. 实验过程及结果 生成树 图的遍历 拓扑排序 prim算法 迪杰斯特拉算法 具体代码见码云 3. 实验过程中遇到的问题和解决过程 问题一:实验过程中对图各个边的权值进行赋值的操作问题 问题一解决办法:选择使用二维数组,并将0行和0列设置为0,不使用。便于后面程序编写时的理解,给自己减少负担。这个二维数组需要自己手动写好在代码里。 其他(感悟、思考等) 实验终于做完了,有很多遗憾

基础补充:8种数据结构

蓝咒 提交于 2020-01-12 01:58:40
数据结构分类 数据结构是指相互之间存在着一种或多种关系的数据元素的集合和该集合中数据元素之间的关系组成 。 常用的数据结构有:数组,栈,链表,队列,树,图,堆,散列表等,如图所示: 每一种数据结构都有着独特的数据存储方式,下面为大家介绍它们的结构和优缺点。 1、数组 数组是可以再内存中连续存储多个元素的结构,在内存中的分配也是连续的,数组中的元素通过数组下标进行访问,数组下标从0开始。例如下面这段代码就是将数组的第一个元素赋值为 1。 int[] data = new int[100];data[0] = 1; 1 2 优点: 1、按照索引查询元素速度快 2、按照索引遍历数组方便 缺点: 1、数组的大小固定后就无法扩容了 2、数组只能存储一种类型的数据 3、添加,删除的操作慢,因为要移动其他的元素。 适用场景: 频繁查询,对存储空间要求不大,很少增加和删除的情况。 2、栈 栈是一种特殊的线性表,仅能在线性表的一端操作,栈顶允许操作,栈底不允许操作。 栈的特点是:先进后出,或者说是后进先出,从栈顶放入元素的操作叫入栈,取出元素叫出栈。 栈的结构就像一个集装箱,越先放进去的东西越晚才能拿出来,所以,栈常应用于实现递归功能方面的场景,例如斐波那契数列。 3、队列 队列与栈一样,也是一种线性表,不同的是,队列可以在一端添加元素,在另一端取出元素,也就是:先进先出

数据结构-List接口-LinkedList类-Set接口-HashSet类-Collection总结

瘦欲@ 提交于 2020-01-10 18:11:19
一.数据结构:4种--<需补充> 1.堆栈结构: 特点:LIFO(后进先出);栈的入口/出口都在顶端位置;压栈就是存元素/弹栈就是取元素; 代表类:Stack; 其它:main方法最后一个出去; 2.数组结构: 特点:一片连续的空间;有索引,查找快;增删慢; 代表类:ArrayList; 应用场景:用于查询多的场景,如天气预报; 3.队列结构: 特点:FIFO(先进先出);入口/出口在两侧; 代表:Queue接口 应用场景:12306购票网站 4.链表结构: 特点:增删快,查询慢; 代表:LinkedList类;Linked开头的都是链表结构. 应用场景:比如监控;历史操作/日志; 二.List接口:(java.util) 定义:public interface List<E> extends Collection<E>{} List接口属于Collection的子接口之一,Collection中的所有方法,List接口的对象都能用. 特点:有序,带索引,允许重复,可以存放多个null值; 常用子类:ArrayList;LinkedList; 常用方法: public void add(int index,E element){}在指定位置增加元素; public boolean addAll(int index, Collection<? extends E> c){

python数据结构与算法

你离开我真会死。 提交于 2020-01-10 13:12:52
二分查找的测试程序,从命令行参数中获取测试列表的各元素以及所要查找的关键字。(主要是列表参数的处理) # coding=utf-8 import sys #使用以下语句将参数的str格式转换为int格式 L = list ( map ( int , sys . argv [ 1 ] . split ( "," ) ) ) target = int ( sys . argv [ 2 ] ) def BinarySearch ( ) : print ( L ) print ( target ) left = 0 right = len ( L ) - 1 while left <= right : mid = ( left + right ) // 2 if L [ mid ] < target : left = mid + 1 elif L [ mid ] > target : right = mid - 1 else : return mid return - 1 def main ( ) : print ( "查找的关键字位于列表的索引:" , BinarySearch ( ) ) if __name__ == '__main__' : main ( ) 归并排序 import sys L = list ( map ( int , ( sys . argv [ 1 ] .

20182326 2019-2020-1 《数据结构与面向对象程序设计》实验七报告

余生长醉 提交于 2020-01-09 16:49:05
20182326 2019-2020-1 《数据结构与面向对象程序设计》实验七报告 课程:《程序设计与数据结构》 班级: 1823 姓名: 刘颖洁 学号:20182326 实验教师:王志强 实验日期:2019年11月4日 必修/选修: 必修 1.实验内容 1.定义一个Searching和Sorting类,并在类中实现linearSearch,SelectionSort方法,最后完成测试。 要求不少于10个测试用例,提交测试用例设计情况(正常,异常,边界,正序,逆序),用例数据中要包含自己学号的后四位 提交运行结果图。 2.重构你的代码 把Sorting.java Searching.java放入 cn.edu.besti.cs1823.(姓名首字母+四位学号) 包中(例如:cn.edu.besti.cs1823.G2301) 把测试代码放test包中 重新编译,运行代码,提交编译,运行的截图(IDEA,命令行两种) 3.参考http://www.cnblogs.com/maybe2030/p/4715035.html ,学习各种查找算法并在Searching中补充查找算法并测试 提交运行结果截图 4.补充实现课上讲过的排序方法:希尔排序,堆排序,二叉树排序等(至少3个) 测试实现的算法(正常,异常,边界) 提交运行结果截图(如果编写多个排序算法,即使其中三个排序程序有瑕疵