数据结构之哈希算法
查找
本来是想根据数,二叉树,图,栈,队列,查找,排序总结到一个md文件里面的,但是内容可能会很多就不太方便合起来整理,就先写查找算法吧
哈希查找
是一种时间复杂度为O(1)的一种效率极高的查找方法,与常见的遍历查找不同,哈希算法是通过数组元素数值与哈希表下标构建的一种查找方法,因此我们不需要遍历整个数组,即可对其进行访问。
如果不发生碰撞效率极高,因此设计散列函数也十分重要。如H(key) = (keyx3) MOD 7
哈希算法的特点
1、哈希算法具有特殊的哈希表
2、哈希算法不用遍历即可查找访问目的元素
3、哈希算法基于一个特殊的哈希函数所构建
4、哈希表存在哈希碰撞(哈希冲突)
哈希查找算法之线性探测法
在开放定址算法里,线性探测法是散列解决冲突的一种方法
当hash一个关键字时,发现没有冲突,就保存关键字。
如果出现冲突,则就探测冲突地址下一个地址,依次按照线性查找,直到发现有空地址为止,从而解决冲突。
装填因子
一般情况下,设散列表空间大小为m,填入表中的元素个数是n,则称α=n/m为散列表的装填因子,例如大小为17,元素 ...
Python进阶(线程)
Thread线程线程和进程
线程是进程中执行代码的一个分支,每个执行分支(线程)要想工作执行代码需要cpu进行调度,也就是说线程是cpu调度的基本单位,每个进程至少都有一个线程,而这个线程就是我们通常说的主线程。
区别对比
进程之间不共享全局变量
线程之间共享全局变量,但是要注意资源竞争的问题,解决办法: 线程同步
创建进程的资源开销要比创建线程的资源开销要大
进程是操作系统资源分配的基本单位,线程是CPU调度的基本单位
线程不能够独立执行,必须依存在进程中
多进程开发比单进程多线程开发稳定性要强
优缺点对比
进程优缺点:
优点:可以用多核
缺点:资源开销大
线程优缺点:
优点:资源开销小
缺点:不能使用多核
小结
进程和线程都是完成多任务的一种方式
多进程要比多线程消耗的资源多,但是多进程开发比单进程多线程开发稳定性要强,某个进程挂掉不会影响其它进程。
多进程可以使用cpu的多核运行,多线程可以共享全局变量。
线程不能单独执行必须依附在进程里面
线程的参数
线程类Thread参数说明
group: 线程组,目前只能使用None
target: 执行的目标任务名
arg ...
Linux基础命令总结
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105Summary:ls -a #表示表示显示当前目录的文件夹和文件以及隐藏文件ls -l # 通过列表显示当前目录下的文件和文件夹,其中文件夹以d开头,文件以-开头ls -lh # 以智能的方式使用列表来表示当前目录下的文件和文件夹ls -al # 以列表的形式查看文件夹和文件以及隐藏文件pwd # 显示当前所在目录touch a.txt # 创建一个名为a的txt文本文件touch .a.txt # 创建一个隐藏文件名字为a.txtmkdir aaa # 创建一个文件夹 aaals -l ../ # 显示上一级目录cd命令cd 路径 # 切换所在工作路径cd / ...
Python进阶(进程)
多任务编程-进程速查手册Process(group,target,name,args,kwargs)
group:指定进程组,目前只能使用None
target:执行的目标任务名
name:进程名字
args:以元组方式给执行任务传参
kwargs: 以字典方式给执行任务传参
Process创建的实例对象的常用方法:
start():启动子进程实例(创建子进程)
join():等待子进程执行结束
terminate():不管任务是否完成,立即终止子进程
Process创建的实例对象的常用属性:
name:当前进程的别名,默认为Process-N,N为从1开始递增的整数
操作方式
导入进程包
import multiprocessing
创建子进程并指定执行的任务
sub_process = multiprocessing.Process (target=任务名, name=”随便起一个名字”)
启动进程执行任务
sub_process.start()
获取当前进程编号
os.getpid()
获取当前父进程编号
os.ge ...
Java面向对象
Java面向对象
Java的祖师爷,詹姆斯高斯林认为,在这个世界中 **万物皆对象!**任何一个对象都可以包含一些数据,数据属于哪个对象,就由哪个对象来处理。
这样的话,只要我们找到了对象,其实就找到了对数据的处理方式。
所以面向对象编程的好处就是:面向对象的开发更符合人类的思维习惯,让编程变得更加简单、更加直观。
注意事项
第一:一个代码文件中,可以写多个class类,但是只能有一个是public修饰,且public修饰的类必须和文件名相同,如下面代码
123456789101112假设文件名为`Demo1.java`,这个文件中假设有两个类`Demo1类和Student类`如//public修饰的类Demo1,和文件名Demo1相同public class Demo1{ }class Student{ }
第二:对象与对象之间的数据不会相互影响,但是多个变量指向同一个对象会相互影响。
12345678910111213// 这种方式下对象与对象之间的数据不会相互影响Student stu1 = new Studen ...
Java基础复习(上)
Java ReviewDemo1:猜数字小游戏
知识点:Random函数,Scanner函数,while循环,if,else if分支判断语句
1234567891011121314151617181920package com.itheima;public class Procedure { public static void main(String[] args) {Random rd = new Random(); int a = rd.nextInt(100) + 1; // 定义变量a用于接收一个随机数范围在(0-99)+1 Scanner sc = new Scanner(System.in); //接收用户的输入 while (true){ int u = sc.nextInt(); System.out.println("请输入你的猜测"); if (a == u){ ...
Python面向对象案例
面向对象之数据分析实现步骤:
设计一个类,可以完成数据的封装
设计一个抽象类,定义文件读取的相关功能,并使用子类实现具体功能
读取文件,生产数据对象
进行数据需求的逻辑计算(计算每一天的销售额)
通过PyEcharts进行图形绘制
数据处理(file_define.py)
业务逻辑:传入要处理的文件的路径,然后将读取到的数据都转换为Record对象,最后将其封装成list返回
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758"""和文件相关类的定义"""from Class_Exercise_Demo.data_define import Recordimport json# 先定义一个抽象类用来做顶层设计,确定有哪些功能需要实现class FileReader: def read_data(self) -> list: # 该函数为 ...
Python初识函数
Python初识函数1,自定义函数说明文档
方法:
12345def 函数名(参数): """ 说明文档的位置 """ eg: :param a :参数 str :param b :参数 int :return: None
书写函数说明文档是一个很好的代码习惯,在函数名后面写三对双引号并回车则会出现param等自动生成的参数格式,这时可以在冒号后面说明函数的参数的类型,以及函数的返回值类型。
2,函数的形参和实参
定义时小括号中的参数,用来接收参数用的,称为 “形参”
调用时小括号中的参数,用来传递给函数用的,称为 “实参”
3,函数的嵌套12345678def function1(num1, num2): return num1+num2def function2(a,b): ret = function1(a,b) my_avg = ret/2 return my_avgprint(function2(100, 200))
4,局部变量和全局变量
局部变 ...
Linux刷题本
Linux命令Demo1234567891011121314151617181920212223242526272829(熟练使用Linux命令的诀窍是多玩一玩 Linux 操作系统)ls 命令 显示当前目录下的文件ls -a //表示表示显示当前目录的文件夹和文件以及隐藏文件ls -l // 通过列表显示当前目录下的文件和文件夹,其中文件夹以d开头,文件以-开头ls -lh // 以智能的方式使用列表来表示当前目录下的文件和文件夹ls -al // 以列表的形式查看文件夹和文件以及隐藏文件pwd // 显示当前所在目录touch a.txt // 创建一个名为a的txt文本文件touch .a.txt // 创建一个隐藏文件名字为a.txtmkdir aaa // 创建一个文件夹 aaals -l ../ // 显示上一级目录cd命令cd 路径 // 切换所在工作路径cd / // 前往根目录,可以用tab键补全,不容易出错cd ~ // 回到当前用户的主文件夹cd ./test //去当前目录的test文件夹cd - // 返回上次到过的路径cd .. ...
Java基础复习(下)双色球案例
Java案例1,数字加密
需求:某系统的数字密码是一个四位数,如1983,为了安全,需要加密后在进行传输,加密规则是:对密码中的每位数字都加5,再对10求余数,最后将所有数字顺序反转,得到一串加密后的新数字,请设计出满足本需求的加密程序。
123456789101112131415161718192021222324252627282930313233343536373839404142package com.itheima;import java.util.Scanner;public class Encryption { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入要加密的数字:"); int num = sc.nextInt(); // 接收用户的输入 String data = encrypt(num); ...
