2024年Python算法概述(2)_(key+1)%2什么意思(1),Python工程师面试题目

如果你也是看准了Python,想自学Python,在这里为大家准备了丰厚的免费学习大礼包,带大家一起学习,给大家剖析Python兼职、就业行情前景的这些事儿。

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、全套PDF电子书

书籍的好处就在于权威和体系健全,刚开始学习的时候你可以只看视频或者听某个人讲课,但等你学完之后,你觉得你掌握了,这时候建议还是得去看一下书籍,看权威技术书籍也是每个程序员必经之路。

四、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

成为一个Python程序员专家或许需要花费数年时间,但是打下坚实的基础只要几周就可以,如果你按照我提供的学习路线以及资料有意识地去实践,你就有很大可能成功!
最后祝你好运!!!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  2365  (奇数,反转)
  4691  (奇数,反转)
  2544  (偶数,不转)
+    3  (奇数,反转)
————————
 10153  —>  bucket address(桶地址)

4.2.4 数字分析法

数字分析法适用于数据不会更改,且为数字类型的静态表。在决定哈希函数时先逐一检查数据的相对位置和分布情况,将重复性高的部分删除。

4.3 碰撞与溢出问题的处理

在哈希法中,当标识符要放在某个桶(Bucket,哈希表中存储数据的位置)时,若桶已经满了,就会发生溢出(Overflow);另一方面哈希的理想情况是所有数据经过哈希函数运算后都得到不同的值,但现实情况是即使所有关键字段的值都不相同,还是可能得到相同的地址,于是就发生了碰撞(Collision)问题。因此,碰撞发生后处理溢出的问题就显得相当重要。常见的算法有以下几种:

4.3.1 线性探测法

线性探测是当发生碰撞的情况时,若该索引对应的存储位置已有数据,则以线性的方法往后寻找空的存储位置,一旦找到位置就把数据放进去。线性探测法通常把哈希的位置视为环形结构,如此一来若后面的位置已被填满而前面还有位置时,可以将数据存放在前面。

4.3.2 平方探测法

平方探测法中,当溢出发生时,下一次查找的地址是(f(x)+i^2)mod B 与 f(f(x)-i^2) mod B,即让数据值加或减i的平方,例如数据值key,哈希函数f:

 第一次查找: f(key)
 第二次查找:f((key)+1^2)%B
 第三次查找:f((key)-1^2)%B
 第四次查找:f((key)+2^2)%B
 第五次查找:f((key)-2^2)%B
 ......
 ......
 ......

第n次查找:(f(key)+((B-1)/2)^2)%B,其中,B必须为4j+3型的质数,且1<=i<=(B-1)/2

4.3.3 再哈希法

再哈希就是一开始就先设置一系列的哈希函数,如果使用第一种哈希函数出现溢出时就改用第二种,如果第二种也出现溢出则改用第三种,一直到没有发生溢出为止。
例如,h1为key%11,h2为keykey,h3为keykey%11,h4…。接着请使用再哈希处理下列数据碰撞的问题:
681,467,633,511,100,164,472,438,445,366,118:
其中哈希函数为(此处的 m=13)

 F1=h(key)=key MOD m
 F2=h(key)=(key+2) MOD m
 F3=h(key)=(key+4) MOD m

说明如下:
(1) 使用第一种哈希函数h(key)=key MOD 13,所得的哈希地址如下:

 618 -> 5
 467 -> 12
 633 -> 9
 511 -> 4
 100 -> 9
 164 -> 8
 472 -> 4
 438 -> 9
 445 -> 3
 366 -> 2
 118 -> 1

(2) 其中100,472,438都发生碰撞,再使用第二种哈希函数h(value+2)=(value+2) MOD 13,进行数据的地址安排:

100 ->h(100+2)=102 mod 13 =11
472 ->h(472+2)=474 mod 13=6
438 ->h(438+2)=440 mod 13=11

(3) 438仍发生碰撞问题,故接着使用第三种哈希函数h(value+4)=(438+4) MOD 13,重新进行438地址的安排:
438 ->h(438+4)=442 mod 13=11
经过三次再哈希后,数据的地址安排如下:
在这里插入图片描述

五、数组与链表算法

1、静态数据结构(stattic data struct)
数组类型是典型的静态数据结构,它使用连续分配的内存空间,来存储有序表中的数据。静态数据结构是在编译时就给相关额变量分配好的内存空间,由于建立静态数据结构的初期必须事先声明最大可能要占用的固定内存空间,因此容易造成内存浪费。
例如,数据类型就是一种典型的静态数据结构。优点是设计时相当简单,而且读取与修改表中任意一个元素的时间是固定的。缺点是删除或加入数据时,需要移动大量的数据。

2、动态数据结构(dynamic data struct)
动态数据结构又称为“链表”,它使用不连续的内存空间存储具有线性表特性的数据。优点是数据的插入或删除都相当方便,不需移动大量的数据。内存分配是在程序执行时才进行的,所以不需事先声明,这能充分节省内存。优点是在设计数据结构时较麻烦,查找数据时需要按顺序查找,不像数组那样可随机读取。

5.1矩阵

数学角度看,对于m × n矩阵(matrix)的形式,可用计算机中A(m,n)的二位数组来描述。
大部分矩阵的运算和应用都可以使用计算机中的二维数组解决。
在这里插入图片描述
朋友们可以去温习下线性代数
5.1.1 矩阵相加算法
5.1.2 矩阵相乘算法
5.1.3 转置矩阵

5.2 建立单向链表

若以动态分配产生链表节点的节点,可先定义一个类,接着在该类中定义一个指针字段,作用是指向下一个链表节点,该类中至少要有一个数据字段。
例如,声明一个公司员工成绩链表节点的结构声明,包含姓名(name),工资(salary)两个数据字段与一个指针字段(next)。
可以声明如下:

class employee:
    def \_\_init\_\_(self):
        self.name=''
        self.salary=0
        self.next=None

完成声明后,可动态建立链表中的每个节点。假设现要新增一个节点至链表的末尾,且ptr指向链表的每一个节点,在程序上必须设计4个步骤:
①动态分配内存空间给新节点使用;
②将原链表尾部的指针(next)指向新元素所在的内存为止;
③将ptr指针指向新节点的内存位置,表示这是新的链表尾部;
④由于新节点当前为链表的最后一个元素,因此将它的指针(next)指向none。
在这里插入图片描述

5.2.1单向链表的连接功能

对于两个或两个以上的链表的连接(concatention,也称级联),实现方法是将一个链表的尾部连接另外一个链表的头部,以此类推,多个链表也是这样操作,直到连接完为止。
在这里插入图片描述

5.2.2单向链表的节点删除

链表可比作是火车,删除链表中的节点,就像解除火车的其中一个车厢。
其实,编程的很多思想和原理都可在生活中找到参照东西。
删除链表节点的位置主要有以下三种情况:
(1)删除链表的第一个节点(即是删除头节点)
在这里插入图片描述
算法:

top=head
Head=head.next

(2)删除中间的节点
在这里插入图片描述

算法:

Y=ptr.next
ptr.next=Y.next

(3)删除链表的最后一个节点(链表尾部)
在这里插入图片描述
算法:

ptr.next=tail
Ptr.next=None

有兴趣的朋友自己去丰富一下

5.2.3单向链表的反转

六、堆栈与队列算法

堆栈在python中有两种:数组结构和链表结构

6.1用数组实现堆栈

以数组结构实现堆栈的好处是设计的算法相当简单,但如果堆栈本身的大小是变动的,而数组大小只能事先规划和声明好,那么数组规划太大会浪费空间,规划太小了则不够用。

6.2用链表实现堆栈

用链表来实现堆栈的优点是随时可以动态改变链表长度,能有效利用内存资源,不过缺点是设计的算法较为复杂。

6.3 汉诺塔问题的求解算法

法国数学家Lucas在1883年介绍了一个十分经典的汉诺塔(Tower of Hanoi)智力游戏,就是使用递归法与堆栈概念来解决问题的典型范例。

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。

img
img

二、Python必备开发工具

工具都帮大家整理好了,安装就可直接上手!img

三、最新Python学习笔记

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。

img

四、Python视频合集

观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

img

五、实战案例

纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。img

六、面试宝典

在这里插入图片描述

在这里插入图片描述

简历模板在这里插入图片描述

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化学习资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 27
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值