【算法,数据结构】

                                 

                                           数据结构


    1. 图(深度广度优先遍历、单源最短路径、最小生成树)   

数据结构(C++)<图的深度遍历和广度遍历> - CSDN博客     (遍历代码)

数据结构(C++)<图的邻接表表示> - CSDN博客  (定义结构代码)

深度优先遍历:深度优先遍历是一个不断探查和回溯的过程,在探查的每一 步,算法都有一个当前顶点。最初的当前顶点,也就是指定的起始顶点。每一步的探查过程中,首先对当前顶点v进行访问,并立即设置该顶点的访问标志visited[v]=true。接着在v的所有邻接顶点中找出尚未访问过的一个,并将其作为下一步探查的当前顶点。倘若当前顶点的所有邻接顶点已经被访问过,则退回上一步,将上一步所访问的顶点重新取出,当做探查的当前顶点。重复上述过程直到所有顶点已经被访问过。

深度优先遍历

广度优先遍历:广度优先遍历是一个逐层遍历的过程,在此过程中图中有多少个顶点就需要重复多少步,每一步都有一个当前顶点v,并设置当前顶点访问标志visited[v]=true。接着依次访问v的各个未访问过的邻接顶点w1,w2,…wt。再顺序访问w1,w1,…wt的所有还未访问过的邻接顶点。再从这些访问过的顶点去访问它们所有还未被访问过的邻接顶点,重复以上步骤,直到所有顶点都被访问。

   2 红黑树性质 ?各种树性能对比 ?

 红黑树(一)之 原理和算法详细介绍 - 如果天空不死 - 博客园

二叉查找树、平衡二叉树、红黑树、B-/B+树性能对比 - CSDN博客

B树、B+树 - CSDN博客

二叉查找树:有N个节点,树高H为log(N+1)<= H <= log2(N+1)(都是以2为底的对数),查找的平均时间复杂度在O(logN)数量级上(最坏情况时O(N)),插入一个结点的时间复杂度O(logN),  删除操作的时间复杂度最大不会超过O(logN)

删除时间复杂度应该是O(logN)
综合性能对比

红黑树:

(1) 每一个结点的颜色仅仅能是红色或黑色。

(2)根结点是黑色的。

(3) 每一个叶子结点都带有两个空的黑色结点(被称为黑哨兵,就是图中黑色小圆圈),假设一个结点n的仅仅有一个左孩子,那么n的右孩子是一个黑哨兵;假设结点n仅仅有一个右孩子,那么n的左孩子是一个黑哨兵。

(4)假设一个结点是红的,则它的两个儿子都是黑的。也就是说在一条路径上不能出现相邻的两个红色结点。

(5) 对于每一个结点来说,从该结点到其子孙叶结点的全部路径上包括同样数目的黑结点。

红黑树的这5个性质中,第3点是比較难理解的,但它却很有必要。我们看图1中的左边这张图,假设不使用黑哨兵,它全然满足红黑树性质,结点50到两个叶结点8和叶结点82路径上的黑色结点数都为2个。但假设添加黑哨兵后(如图1右图中的小黑圆点),叶结点的个数变为8个黑哨兵,根结点50到这8个叶结点路径上的黑高度就不一样了,所以它并非一棵红黑树。


不是正确的红黑树(为什么要加黑哨兵的原因)
正确的红黑树

B树存在的意义(有效减少内存和磁盘之间交换数据的频率)

如果内存和外存交换数据次数频繁,会造成了时间效率上的瓶颈,那么 B 树结构怎么就可以做到减少次数呢?

外存比如硬盘,是将所有的信息分割成相等大小的页面,每次硬盘读写的都是一个或多个完整的页面,对于一个硬盘来说,一页的长度可能是 211 或 214 个字节。在一个典型的 B 树应用中,要处理的硬盘数据量很大,因此无法一次全部装入内存。因此我们会对 B 树 进行调整,使得 B 树的阶数 (或结点的元素)与硬盘存储的页面大小匹配。比如一棵 B 树的阶位 1001(即一个结点包含 1000 个关键字),高度为 2,它可以存储超过 10 亿个关键字,我们只要让根结点持久地保留在内存中,那么在这棵树上,寻找某一个关键字至多需要两次硬盘的读取即可。

通过这种方式,在有限内存的情况下,每一次磁盘的访问我们都可以获取最大数量的数据。由于 B 树每结点可以具有比二叉树多得多的元素,所以与二叉树的操作不同,它们减少必须访问结点和数据块的数量,从而提高了性能。可以说,B树的数据结构就是为内外存的数据交互准备的。



   二叉树和哈希表查找的时间复杂度 

满二叉树/完美二叉树(Perfect Binary Tree):一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树。 (注: 国内的数据结构教材大多翻译为"满二叉树")

满二叉树/完美二叉树

完全二叉树(Complete Binary Tree): 完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

完全二叉树

完满二叉树(Full Binary Tree)所有非叶子结点的度都是2。(只要你有孩子,你就必然是有两个孩子。)

完满二叉树

3. 静态链表和动态链表的区别

    静态链表和动态链表 - CSDN博客

4.堆和栈的区别?堆和栈的生命周期?

(1)堆栈空间分配区别:

1.栈内存:由程序自动向操作系统申请分配以及回收,速度快,使用方便,但程序员无法控制。若分配失败,则提示栈溢出错误。注意,const局部变量也储存在栈区内,栈区向地址减小的方向增长。

堆内存:程序员向操作系统申请一块内存,当系统收到程序的申请时,会遍历一个记录空闲内存地址的链表,寻找第一个空间大于所申请空间的堆结点,然后将该结点从空闲结点链表中删除,并将该结点的空间分配给程序。分配的速度较慢,地址不连续,容易碎片化。此外,由程序员申请,同时也必须由程序员负责销毁,否则则导致内存泄露。若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。

(2)什么是缓存?一级缓存和二级缓存是什么?堆栈缓存方式区别?

缓存-------- 是CPU的一部分,它存在于CPU中,CPU存取数据的速度非常的快,一秒钟能够存取、处理十亿条指令和数据(术语:CPU主频1G),而内存就慢很多,快的内存能够达到几十兆就不错了,可见两者的速度差异是多么的大。缓存是为了解决CPU速度和内存速度的速度差异问题。内存中被CPU访问最频繁的数据和指令被复制入CPU中的缓存,这样CPU就可以不经常到象“蜗牛”一样慢的内存中去取数据了,CPU只要到缓存中去取就行了,而缓存的速度要比内存快很多。

一级缓存:一级缓存可分为 一级指令缓存 和 一级数据缓存。一级指令缓存用于暂时存储并向CPU递送各类运算指令;一级数据缓存用于暂时存储并向CPU递送运算所需数据。

二级缓存:二级缓存就是一级缓存的缓冲器:一级缓存制造成本很高因此它的容量有限,二级缓存的作用就是存储那些CPU处理时需要用到、一级缓存又无法存储的数据。

1、栈使用的是一级缓存, 他们通常都是被调用时处于存储空间中,调用完毕立即释放;

2、堆是存放在二级缓存中,生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些。

(3)堆栈数据结构区别:

堆(数据结构):是一种非连续的树形储存数据结构,每个节点有一个值,整棵树是经过排序的。

栈(数据结构):是一种连续储存的数据结构,具有先进后出的性质。

5.数据结构中各种树

【数据结构】数据结构中常用的树 - CSDN博客

6. 平衡二叉树(AVL树)    平衡二叉树(AVL树)小结 - as_ - 博客园

定义:AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为一,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下都是O(logn)。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。

(1)插入:向AVL树插入可以通过如同它是未平衡的二叉查找树一样把给定的值插入树中,接着自底向上向根节点折回,于在插入期间成为不平衡的所有节点上进行旋转来完成。因为折回到根节点的路途上最多有1.5乘logn个节点,而每次AVL旋转都耗费恒定的时间,插入处理在整体上耗费O(logn) 时间

(2)删除:从AVL树中删除可以通过把要删除的节点向下旋转成一个叶子节点,接着直接剪除这个叶子节点来完成。因为在旋转成叶子节点期间最多有logn个节点被旋转,而每次AVL旋转耗费恒定的时间,删除处理在整体上耗费的时间复杂度O(logn) 时间。

(3)查找:可以像普通二叉查找树一样的进行,所以耗费O(logn)时间,因为AVL树总是保持平衡的。不需要特殊的准备,树的结构不会由于查找而改变。(这是与伸展树查找相对立的,它会因为查找而变更树结构。)


                                        算法


1.有1一亿个数据,只需要找到前100个最大的数据,有什么思路?

用100个节点的大顶堆,每次从数据库中入堆,取出堆顶的数字,这样不断的入堆出堆。

2.怎样去评估存储机群的容量(用多少个机器去组成机群合适)

3. 海量数据处理的知识点,(hash表, hash统计)

    海量数据处理方法: 教你如何迅速秒杀掉:99%的海量数据处理面试题 - CSDN博客

你如何迅速秒杀掉:99%的海量数据处理面试题 - CSDN博客

十道海量数据处理面试题与十个方法大总结 - CSDN博客

十一、从头到尾解析Hash表算法 - CSDN博客

Trie树详解及其应用 - CSDN博客

大数据处理-Bitmap - 紫魔戒 - 博客园

十道海量数据处理面试题与十个方法大总结 - CSDN博客

4.怎样统计一篇英文文章中出现频率最高的10个单词,用什么数据结构和算法实现?

字典树(Trie)或者hash_map都可以

5.找出一个字符串中第一次出现的指定字符,怎么优化算法?

6.字符串与数值类型变量之间互相转换

(1)字符串转double  (2)字符串转成long型   (3)字符串转整形

(1)double atof(const char *_String);   (2)long atol(const char *_String);  (3) int atoi(const char *_String);

将字符串转成数字通用做法:用 istringstream字符串输入流,先把string输入流,再把流输出到数字变量

istringstream : 将str中的内容读到 iss中去,后面的  iss>>num 是 类似于cin>>num一样,将iss中的内容输入到num中去。

将数值类型变量转换为字符串类型通用方法:利用字符串输出流ostringstream

ostringstream :将num中的内容写到oss中去,最后一起输出来返回

方法str()将缓冲区的内容复制到一个string对象中,并返回

注意  :  <<   或者  >>箭头的方向代表就是数据流入的方向  

istringstream  >> text   数据从  istringstream  流入到  text

ostringstream  << text   数据从 text  流入到 ostringstream 

7.设计模式六大原则

设计模式之六大原则(转载) - 海 子 - 博客园

8.自己实现一个微信朋友圈的功能

朋友圈的设计及实现。 - CSDN博客

9. 非递归实现二叉树的前序、中序、后序遍历

前序遍历
中序遍历
后序遍历

更简单的非递归遍历二叉树的方法 - 简书

对于前序遍历是可以进行更优化的

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354

推荐阅读更多精彩内容

  • 一些概念 数据结构就是研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,而且确保经过这...
    Winterfell_Z阅读 5,794评论 0 13
  • 目录 1、什么是树 2、相关术语 3、二叉树 3.1、二叉树的类型 3.2、二叉树的性质 3.3、二叉树的结构 3...
    我哈啊哈啊哈阅读 2,548评论 0 10
  • 课程介绍 先修课:概率统计,程序设计实习,集合论与图论 后续课:算法分析与设计,编译原理,操作系统,数据库概论,人...
    ShellyWhen阅读 2,286评论 0 3
  • 第一章 绪论 什么是数据结构? 数据结构的定义:数据结构是相互之间存在一种或多种特定关系的数据元素的集合。 第二章...
    SeanCheney阅读 5,771评论 0 19
  • 起床后,我突然听见我的室友跟我说有老鼠,我突然间想到人鼠大战有意思吗,我们在最近这几千年都是地球的统治者,但是你有...
    红小豆豆阅读 370评论 0 0