一些算法问题

在这里插入图片描述

算法是比较复杂又基础的学科,每个学编程的人都会学习大量的算法。而根据统计,以下这18个问题是面试中最容易遇到的

1、请简单解释算法是什么?
·——算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。
算法就是用数学量化思维来解决现实中的问题,本质上是在输入输出中间的过程,将待处理.分析数据通过算法得到目标result

2、解释什么是快速排序算法?
快排在所有排序中的时间复杂度是最低的,效率最高,他是通过递归把一个个的元素大的值放在后面.小的值放在前面,直到列表中分到了只有一个元素为止,就是排完了

3、解释算法的时间复杂度?
表示程序运行完成所需的总时间,它通常用O(n)来表示,比如两个for循环的时间复杂度是O(n^2)

4、请问用于时间复杂度的符号类型是什么?
·——用于时间复杂度的符号类型包括:
Big Oh:它表示小于或等于目标多项式
Big Omega:它表示大于或等于目标多项式
Big Theta:它表示与目标多项式相等
Little Oh:它表示小于目标多项式
Little Omega:它表示大于目标多项式

5、解释二分法检索如何工作?
确定start和end和中间位置,检索k是比中间值大还是小,如果小就以开始和中间作为下次递归检索,直到start和end相差为1为止,如果最后变成一样的话,说明没有在里面

6、解释是否可以使用二分法检索链表?
除非是排序好了的链表,因为在链表中不能随机访问

7、解释什么是堆排序?
堆就是一个完全二叉树,堆排序分为小根堆和大根堆…·
·——堆排序可以看成是选择排序的改进,它可以定义为基于比较的排序算法。它将其输入划分为未排序和排序的区域,通过不断消除最小元素并将其移动到排序区域来收缩未排序区域。

8、说明什么是skip list?
redis 里使用了 skip list,它是一种链表,它在链表的基础上增加了跳跃功能,使得在增删改查元素时,跳表能够提供 O(log N) 的时间复杂度。
·——Skip list数据结构化的方法,它允许算法在符号表或字典中搜索、删除和插入元素。在Skip list中,每个元素由一个节点表示。搜索函数返回与key相关的值的内容。插入操作将指定的键与新值相关联,删除操作可删除指定的键。

9、解释插入排序算法的空间复杂度是多少?
·——插入排序是一种就地排序算法,这意味着它不需要额外的或仅需要少量的存储空间。对于插入排序,它只需要将单个列表元素存储在初始数据的外侧,从而使空间复杂度为O(1)。

10、解释什么是“哈希算法”,它们用于什么?
hash是一种编码方式,一般用于加密功能
·——“哈希算法”是一个哈希函数,它使用任意长度的字符串,并将其减少为唯一的固定长度字符串。它用于密码有效性、消息和数据完整性以及许多其他加密系统。

11、解释如何查找链表是否有循环?
·——要知道链表是否有循环,我们将采用两个指针的方法。如果保留两个指针,并且在处理两个节点之后增加一个指针,并且在处理每个节点之后,遇到指针指向同一个节点的情况,这只有在链表有循环时才会发生。

12、解释加密算法的工作原理?
·——加密是将明文转换为称为“密文”的密码格式的过程。要转换文本,算法使用一系列被称为“键”的位来进行计算。密钥越大,创建密文的潜在模式数越多。大多数加密算法使用长度约为64到128位的固定输入块,而有些则使用流方法。

13、列出一些常用的加密算法?
一些常用的加密算法是:3-way、Blowfish、CAST、CMEA、GOST、DES 和Triple DES、IDEA、LOKI等等

14、解释一个算法的最佳情况和最坏情况之间有什么区别?
·——最佳情况:算法的最佳情况解释为算法执行最佳的数据排列。例如,我们进行二分法检索,如果目标值位于正在搜索的数据中心,则这就是最佳情况,最佳情况时间复杂度为0。
·——最差情况:给定算法的最差输入参考。例如快速排序,如果选择关键值的子列表的最大或最小元素,则会导致最差情况出现,这将导致时间复杂度快速退化到O(n2)。

15、解释什么是基数排序算法?
·——基数排序又称“桶子法”,是通过比较数字将其分配到不同的“桶里”来排序元素的。它是线性排序算法之一。
在某些时候,基数排序法的效率高于其它的稳定性排序法
比如73, 22, 93, 43, 55, 14, 28, 65, 39, 81
基数排序先排序个位数,排好的新数组再排十位数,然后就得到结果,这是LSD,还有MSD从高位开始排,麻烦一些

16、解释什么是递归算法?
递归就是自己调用自己,一般用来解决复杂问题,但一些操作是同类型、可以重复的,递归传递参数来控制事务的起点和终点

17、提到递归算法的三个定律是什么?
所有递归算法必须遵循三个规律:
递归算法必须有一个基点
递归算法必须有一个趋向基点的状态变化过程
递归算法必须自我调用

18、解释什么是冒泡排序算法?
两个for循环,两两相比,把第一个元素安置到位,然后从第二个元素再开始…
而选择排序是一直比第一个元素,把槽安排的明明白白的,然后第二位…
·——冒泡排序算法也称为下沉排序。在这种类型的排序中,要排序的列表的相邻元素之间互相比较。如果它们按顺序排列错误,将交换值并以正确的顺序排列,直到最终结果“浮”出水面。

猜你喜欢

转载自blog.csdn.net/weixin_42394432/article/details/82912580