本帖最后由 sunny1889 于 2014-7-14 16:00 编辑
1.排序的算法有很多,冒泡排序、计数排序、插入排序、归并排序和堆排序等,请问这些主流算法的思路是怎样的?各有什么优缺点?请结合应用场景谈谈您的看法。
冒泡排序:进行n-1排序,第一次排序先找出最小的数字,放在第一个位置,然后在剩余的数字中再找出最小的数字,放在第二个位置上,依次类推,可以排出所有的数字。
计数排序:计数排序假设n个输入元素中的每一个都是介于0到k之间的整数(k为整数),对每一个输入元素x,确定出小于x的元素个数。有了这一信息就可以直接将元素放到该放的地方了。
插入排序:使用扩大有序区缩小无序区的方法实现排序,插入排序是按照顺序遍历无序区的元素,并且将它们挨个插入到有序区中,就好比是打扑克时的插扑克的操作一样。
归并排序:是建立在归并操作上的一种排序算法,要理解归并排序在于理解要排序数列的更新过程,(1和2按有序合并)---(1,2和3,4按有序合并)---(1,2,3,4和4,5,6,7按有序合并)---...)
堆排序:堆可以被视为一个完全二叉树,树的每一层都填满,最后一层除外。堆排序即每次将根结点放入数组最后一位,然后使堆的长度减一,循环直至堆的长度为1。堆排序常见应用:处理优先级队列。
2.栈和队列有哪些区别?它们有哪些作用?适用于哪些应用?
栈先进后出,队列先进先出。栈是限定只能在表的一端进行插入和删除操作的线性表。队列是限定只能在表的一端进行插入和在另一端进行删除操作的线性表。
定义栈和队列数据结构是为了保存遍历所经过的路径,亦即保存遍历过程中的每一个结点的信息。
铁路调度中用到栈,民航机票订购中用到队列。
3.请谈谈您对深度优先搜索法和广度优先搜索法这两种算法的理解,可以举例说明。
以树的搜索为例,深度优先搜索法是优先扩展尚未扩展的且具有最大深度的结点;广度优先搜索法是在扩展完第K层的结点以后才扩展K+1层的结点。
4.说说读完试读章节后您的感想。
Aha! GoodJob! 哪怕是完全不懂计算机科学的读者,也可以快速地了解计算机科学中最具魅力最重要的部分——算法。即使对于文科生、或者小资白领而言,也可以学习到当今最热门的一种思维方式——与“理论思维(逻辑推导)”、“实验思维(实证分析)”并列的——“计算思维”的精髓。计算机系课程当中,算法课堪称难度最高的课程之一。各种算法的复杂度分摊、组合分析什么的,绝对能把学这门课的人难哭。但这还不是最惨的,最惨的是,在含泪搞定习题和分析之后,发现自己根本就没明白算法的动机和原理。然而,这种只见树木不见森林的事,在计算机系学生身上往往很常见。试读了第一章,主要讲解了几种排序,感觉作者讲的比较生动,容易理解,觉得这是一本非常有趣的算法书,诙谐的语言、友爱的插画以及好玩的例子。试读章节给我的感觉是: 1.语言生动活泼。技术书籍往往令人乏味,但是该书读起来让人轻松,有共鸣。如“举个栗子”,“一大波数向你靠近”等。 2.图文并茂,用轻松直观的方式把算法描述清楚;插图近似漫画风格、风趣形象。插图有利于对内容的理解,并可以让读者短暂的休息大脑,提高阅读的乐趣。 3.挑选的算法都是实用且基础的算法,为深入学习后续内容打好根基;案例循序渐进,精心挑选。从问题入手,抛出问题后,给予算法的解答,将解答和生活中的例子进行类比,如“冒泡排序”和排队照相时的交换位置,使得理解更加容易。在分析一个算法的弱点后,给出改进后的算法,使得算法之间的优劣和算法的改进发展历程更加清晰。 4.算法的效率分析简单明了。即使小学、初高中以上读者即可理解。因此该书可作为参加青少年信息学竞赛的同学入门和训练书。也可以作为大学生ACM程序设计竞赛的补充读物。也可以作为高等学校信息类专业算法课程的课外读物。 5.背景知识介绍得较为全面,这对了解算法产生的动机和各算法之间的关系、建立整体印象来说十分重要。大牛的趣味轶事很有趣。书中穿插的故事,如高德纳,迪杰斯特拉等,能够让读者了解大神们的神来之笔和趣事。 感觉该书目的是轻松描述算法,不过有些网络用词,例如“东东”,容易让读者对本书价值印象大打折扣,也许其它章节有所改观。但是作为科普读物来读,质量在这个级别算是上乘。
|