摘要: 虚拟内存 为什么要有虚拟内存? 让每个进程都有独立的内存空间,每个进程都有自己的私有页表,提供一个可以执行多进程的环境。 利用程序运行局部性原理,允许进程的内存空间超过物理内存大小。 页表中维护着页的权限属性,使内存访问更安全。 假如没有虚拟内存,则会有进程空间不隔离的问题,比如进程A会改写进程B的 阅读全文
posted @ 2022-08-22 16:04 Ethan'Chen 阅读(1043) 评论(0) 推荐(0) 编辑
摘要: # 字符串匹配——KMP算法 1. 算法原理 在暴力匹配过程中,当遇到匹配失败的字符时,暴力法做法是将模式串后移一位,从头开始匹配,直到成功匹配下一位字符。 KMP算法的核心思想就是:充分利用模式串自身的信息,在每次匹配失败之后不需要重复匹配之前已经成功匹配的字符,快速定位到下一个需要匹配的字符,从 阅读全文
posted @ 2022-08-22 14:16 Ethan'Chen 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 二分查找 二分查找分为整数二分和小数二分,其中整数二分涉及的边界问题比较多,理解起来相对复杂。 # 整数二分 如果可以找到一个性质,可以把区间一分为二,一半满足性质一半不满足。二分可以找到这个性质的边界,可以是①也可以是②。 这里这个分界点①和②就分两种情况讨论。 # 寻找边界点①——右边界 mid 阅读全文
posted @ 2022-08-22 14:08 Ethan'Chen 阅读(30) 评论(0) 推荐(0) 编辑
摘要: 1. 归并排序——分治 # 算法原理 归并排序的思想就是分治,先递归分解数组,再合并数组。 将数组分解到最小之后,再往上一层两两合并两个有序的数组,最终递归返回的就是一个排好序的数组。 递归分解的时间复杂度是O(logn),合并数组的时间复杂度是O(n),因此归并排序的时间复杂度就是O(nlogn) 阅读全文
posted @ 2022-08-22 13:53 Ethan'Chen 阅读(48) 评论(0) 推荐(0) 编辑