今日事项-2024年7月13日 事项一 收集3个实用的经典算法 1. Dijkstra 算法
产生原因与背景: 想象你要在一张地图上找到从一个城市到所有其他城市的最短路径,每条道路都有不同的距离,Dijkstra 算法就像是一位精明的旅行者,他总是选择当前看起来最短的路径,逐步找到到达所有目的地的最短路径。
算法思路: Dijkstra 算法就像是一位探险家在探索未知的岛屿,他从一个小岛出发,总是选择最近的岛屿去探索,然后标记这个岛屿和到达它的最短路径,再继续探索下一个最近的岛屿,直到所有的岛屿都被探索过。
代码案列: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 import heapqdef dijkstra (graph, start ): distances = {node: float ('infinity' ) for node in graph} distances[start] = 0 priority_queue = [(0 , start)] while priority_queue: current_distance, current_node = heapq.heappop(priority_queue) if current_distance > distances[current_node]: continue for neighbor, weight in graph[current_node].items(): distance = current_distance + weight if distance < distances[neighbor]: distances[neighbor] = distance heapq.heappush(priority_queue, (distance, neighbor)) return distances graph = { 'A' : {'B' : 1 , 'C' : 4 }, 'B' : {'D' : 3 }, 'C' : {'D' : 5 , 'E' : 2 }, 'D' : {}, 'E' : {'D' : 1 } } start_node = 'A' print ("Shortest distances from" , start_node, ":" , dijkstra(graph, start_node))
算法优缺点: 优点:Dijkstra 算法可以高效地找到单源最短路径,特别是在图的边权都是非负的情况下。 缺点:如果边权是负数,Dijkstra 算法可能无法正确工作,因为它不适用于包含负权边的图。
解决缺点的方法: 对于有负权边的图,可以使用 Bellman-Ford 算法,它可以处理负权边,但时间复杂度较高。
解决缺点后的代码案例: 略(Bellman-Ford 算法已经在上文中给出)
算法的3个实际应用案例:
GPS 导航 :计算从一个地点到多个目的地的最短行驶距离。
网络路由 :在网络中找到数据传输的最短路径。
城市交通规划 :优化公共交通路线,减少乘客的出行时间。
2. 贝叶斯分类器(Naive Bayes Classifier)
产生原因与背景: 想象你是一位侦探,需要根据一系列线索来判断犯罪嫌疑人。贝叶斯分类器就像是一位根据证据来做出判断的侦探,它使用贝叶斯定理来计算每个类别的后验概率,从而决定最可能的类别。
算法思路: 贝叶斯分类器就像是一位医生在诊断病人,根据病人的症状和已知的疾病概率,使用贝叶斯定理来确定最可能的疾病。
代码案列: 略(贝叶斯分类器的实现较为复杂,通常涉及概率论和统计学)
算法优缺点: 优点:贝叶斯分类器在处理大量特征的数据集时非常高效,尤其是在文本分类和垃圾邮件检测等领域。 缺点:贝叶斯分类器假设特征之间相互独立,这在现实中很少成立,可能会影响分类的准确性。
解决缺点的方法: 可以通过特征选择或使用更复杂的模型来减少特征独立性的假设带来的影响。
解决缺点后的代码案例: 略(特征选择和模型优化通常需要特定的数据集和领域知识)
算法的3个实际应用案例:
垃圾邮件检测 :根据邮件内容判断是否为垃圾邮件。
情感分析 :判断社交媒体上的评论是正面还是负面。
疾病诊断 :根据病人的症状和体征来辅助诊断疾病。
3. 决策树(Decision Tree) 产生原因与背景: 想象你在决定是否要出门野餐,你会考虑天气、温度、是否有朋友同行等因素。决策树就像是一个帮助你做决定的流程图,它通过一系列的问题引导你做出最终的决定。
算法思路: 决策树就像是一位厨师在选择食谱,他根据现有的食材、客人的口味偏好和烹饪时间来决定做什么菜。
代码案列: 略(决策树的实现较为复杂,通常涉及机器学习库)
算法优缺点: 优点:决策树直观易懂,可以处理数值和类别数据,且不需要太多预处理。 缺点:决策树容易过拟合,特别是树很深或数据集很复杂时。
解决缺点的方法: 可以通过剪枝来减少决策树的深度,或者使用集成方法如随机森林来提高泛化能力。
解决缺点后的代码案例: 略(剪枝和随机森林的实现通常需要使用机器学习库)
算法的3个实际应用案例:
医疗诊断 :根据病人的症状、体检结果和历史记录来辅助诊断疾病。
客户流失预测 :根据客户的使用习惯和反馈来判断客户是否会流失。
信用评分 :根据申请人的财务信息和历史信用记录来评估信用风险。
事项二 重学OSI七层模型&&TCP/IP四层模型 OSI七层模型
OSI(Open System Interconnect)七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能,从物理连接到应用程序的处理。这种模型有助于不同的系统之间进行通信时,更好地理解和管理网络通信的过程。 OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。
1 2 3 4 5 6 7 8 9 10 11 12 13 应用层(Application Layer):这是网络体系结构中的最顶层,提供用户接口和应用程序之间的通信服务。在这一层,用户可以访问各种网络应用程序,如电子邮件、文件传输和远程登录。 表示层(Presentation Layer):该层负责数据的格式化、加密和压缩,以确保数据在不同系统之间的交换是有效的和安全的。它还提供了数据格式转换和语法转换的功能。 会话层(Session Layer):会话层管理应用程序之间的通信会话,负责建立、维护和终止会话。它还提供了数据的同步和检查点恢复功能,以确保通信的完整性和持续性。 传输层(Transport Layer):传输层为应用程序提供端到端的数据传输服务,负责数据的分段、传输控制、错误恢复和流量控制。它主要使用 TCP(传输控制协议)和 UDP(用户数据报协议)来实现这些功能。 网络层(Network Layer):网络层负责数据包的路由和转发,以及网络中的寻址和拥塞控制。它选择最佳的路径来传输数据包,以确保它们能够从源主机到目标主机进行传输。 数据链路层(Data Link Layer):数据链路层提供点对点的数据传输服务,负责将原始比特流转换为数据帧,并检测和纠正传输中出现的错误。它还控制访问物理媒介的方式,以及数据帧的传输和接收。 物理层(Physical Layer):物理层在物理媒介上传输原始比特流,定义了连接主机的硬件设备和传输媒介的规范。它确保比特流能够在网络中准确地传输,例如通过以太网、光纤和无线电波等媒介。
TCP/IP四层模型
1 2 3 4 5 6 7 应用层(Application Layer)类似于 OSI 模型中的应用层,负责处理用户与网络应用程序之间的通信。它包括诸如 HTTP、FTP、SMTP 等协议,用于实现不同类型的网络服务和应用。 传输层(Transport Layer):与 OSI 模型中的传输层相对应,提供端到端的数据传输服务。在 TCP/IP 模型中,主要有两个协议:TCP(传输控制协议)和 UDP(用户数据报协议),用于确保可靠的数据传输和简单的数据传输。 网络层(Internet Layer):相当于 OSI 模型中的网络层,负责数据包的路由和转发。它使用 IP (Internet Protocol)协议来定义数据包的传输路径,并处理不同网络之间的通信。 网络接口层(Link Layer):与 OSI 模型中的数据链路层和物理层相对应,负责管理网络硬件设备和物理媒介之间的通信。它包括以太网、Wi-Fi、蓝牙等各种物理层和数据链路层协议。
应用层常见协议 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 HTTP(HyperText Transfer Protocol):用于在客户端和服务器之间传输超文本数据,通常用于 Web 浏览器和 Web 服务器之间的通信。 FTP(File Transfer Protocol):用于在客户端和服务器之间传输文件,支持上传和下载文件的功能。 SMTP(Simple Mail Transfer Protocol):用于在邮件服务器之间传输电子邮件,负责发送邮件。 POP3(Post Office Protocol version 3 ):用于从邮件服务器上下载邮件到本地计算机,负责接收邮件。 IMAP(Internet Message Access Protocol):也是用于接收邮件的协议,与 POP3 类似,但提供了更丰富的功能,如在服务器上管理邮件等。 DNS(Domain Name System):用于将域名解析为对应的 IP 地址,从而实现域名和 IP 地址之间的映射。 HTTPS(HyperText Transfer Protocol Secure):是 HTTP 的安全版本,通过 SSL/TLS 加密传输数据,保证通信过程中的安全性。 SSH(Secure Shell):用于远程登录和执行命令,提供了加密的网络连接,保证了通信的安全性。 SNMP(Simple Network Management Protocol):用于网络设备之间的管理和监控,可以实现对网络设备的远程配置和监控。 Telnet:用于远程登录和执行命令,类似于 SSH,但不提供加密功能,通信数据不安全。
传输层常见协议 1 2 3 TCP(Transmission Control Protocol):提供可靠的、面向连接的数据传输服务,确保数据的可靠性、顺序性和完整性。TCP适用于对数据传输质量要求较高的场景,如文件传输、网页浏览等。 UDP(User Datagram Protocol):提供无连接的数据传输服务,不保证数据的可靠性,也不保证数据的顺序性和完整性。UDP适用于实时性要求较高、对数据传输质量要求不那么严格的场景,如音视频传输、在线游戏等。
网络层常见协议 1 2 3 4 5 6 7 8 9 IP (Internet Protocol):是互联网中最基本的协议,用于在网络中传输数据包。IP 协议定义了数据包的格式、寻址方式和路由选择等信息,是整个互联网的基础。 ICMP(Internet Control Message Protocol):用于在IP 网络中传递控制消息和错误信息。ICMP通常用于网络设备之间的通信,如路由器和主机之间的通信,以及用于检测网络连通性和故障诊断。 ARP(Address Resolution Protocol):用于将IP 地址映射为MAC地址(物理地址)。ARP协议在局域网内部使用,通过发送ARP请求获取目标设备的MAC地址,从而实现数据包的传输。 RARP(Reverse Address Resolution Protocol):与ARP相反,用于将MAC地址映射为IP 地址。RARP协议通常用于无盘工作站等设备,可以根据MAC地址获取对应的IP 地址。 IPv6(Internet Protocol version 6 ):是IP 协议的下一代版本,用于解决IPv4地址空间不足的问题。IPv6采用128 位地址长度,提供了更大的地址空间,支持更多的设备连接到互联网。
网络接口层常见协议 1 2 3 4 5 6 7 以太网协议(Ethernet ):是一种常见的局域网技术,使用MAC地址进行帧的传输和接收。 无线局域网协议(Wi-Fi):用于无线局域网的数据传输,通常基于IEEE 802.11 标准。 点对点协议(PPP):用于建立点对点连接的协议,通常用于拨号连接和虚拟专用网(VPN)等场景。 数据链路层交换协议(DLC):用于在数据链路层进行数据交换和管理的协议,如HDLC、SLIP和PPP等。