学期(如2024-2025-1) 学号(如:20241428) 《计算机基础与程序设计》第6周学习总结
作业信息
这个作业属于哪个课程 | <班级的链接>(如2024-2025-1-计算机基础与程序设计) |
---|---|
这个作业的目标 | <写上具体方面> |
作业正文 | https://i.cnblogs.com/posts/edit |
教材学习内容总结
时间复杂度:
最好情况(Best Case):算法在最理想情况下的时间复杂度。
平均情况(Average Case):算法在所有可能的输入情况下的平均时间复杂度。
最坏情况(Worst Case):算法在最坏情况下的时间复杂度。
空间复杂度:
描述算法在执行过程中需要的存储空间与输入数据规模之间的关系。
大O表示法:
用于描述算法复杂度的上界,通常忽略常数因子和低阶项。
常见的时间复杂度有:O(1), O(log n), O(n), O(n log n), O(n^2), O(n^3), O(2^n), O(n!) 等。
常见的时间复杂度分析:
常数时间:O(1),算法执行时间不随输入规模变化。
对数时间:O(log n),如二分查找。
线性时间:O(n),如直接插入排序。
线性对数时间:O(n log n),如快速排序、归并排序。
二次时间:O(n^2),如冒泡排序、选择排序。
立方时间:O(n^3),如某些矩阵乘法算法。
指数时间:O(2^n),如暴力搜索算法。
阶乘时间:O(n!),如旅行商问题(TSP)的暴力解法。
递归算法的时间复杂度:
递归算法的时间复杂度分析通常需要使用递归关系式,如斐波那契数列的递归关系。
分治算法的时间复杂度:
通常形式为T(n) = aT(n/b) + f(n),其中a是递归调用的次数,b是每次递归调用处理的输入规模的缩小比例,f(n)是递归之外的工作量。
动态规划的时间复杂度:
动态规划通常用于解决具有重叠子问题和最优子结构特性的问题,其时间复杂度取决于状态转移方程的复杂度。
输入验证:
验证所有用户输入,包括前端和后端,以防止SQL注入、跨站脚本(XSS)等攻击。
使用白名单验证方法,明确定义可接受的输入格式。
数据加密:
对敏感数据进行加密,无论是在传输过程中还是存储在数据库中。
使用强加密算法,如AES、RSA等,并定期更新密钥。
安全配置:
确保系统和应用程序的配置符合安全最佳实践,例如关闭不必要的服务和端口。
定期更新和打补丁,以防止已知漏洞被利用。
错误处理:
避免在生产环境中显示详细的错误信息,这可能会泄露系统信息给攻击者。
实现适当的错误处理机制,确保应用程序在遇到错误时不会崩溃。
代码审计和静态分析:
定期进行代码审计,以发现和修复安全漏洞。
使用静态代码分析工具自动检测潜在的安全问题。
权限和访问控制:
实施基于角色的访问控制(RBAC),确保用户只能访问他们被授权的资源。
最小权限原则:只授予执行任务所需的最低权限。
会话管理:
安全地生成和管理会话标识符,防止会话劫持。
实施会话超时和失效机制,减少未经授权的访问。