政治2026/5/21唯物辩证法本质上是批判的和革命的在唯物辩证法看来一切事物都处在发生、发展和灭亡的过程中“不存在任何最终的东西、绝对的东西、神圣的东西”。唯物辩证法是客观辩证法与主观辩证法的统一①客观辩证法客观事物或客观存在的辩证法即客观事物以相互作用、相互联系的形式呈现出的各种物质形态的辩证运动和发展规律。②主观辩证法人类认识和思维运动的辩证法即以概念作为思维细胞的辩证思维运动和发展规律。③主观辩证法是客观辩证法在人的思维中的反映。客观辩证法与主观辩证法在本质上是统一的但在表现形式上是不同的。客观辩证法采取外部必然性形式不以人的意志为转移是物质世界本身的联系和发展。主观辩证法则采取观念的、逻辑的形式是同人类思维的自觉活动相联系的,是以概念为基础的辩证思维规律,是辩证法的科学体系。矛盾分析方法是认识事物的根本方法矛盾分析方法是对立统一规律在方法论上的体现在唯物辩证法的方法论体系中居于核心地位是我们认识事物的根本法。矛盾分析方法的核心要求是善于分析矛盾的特殊性做到具体矛盾具体分析对具体情况、具体问题作具体分析。六大能力①辩证思维能力是以唯物辩证法为指导发现矛盾、分析矛盾、解决矛盾把握本质、遵循规律、指导实践的能力。提高辩证思维能力,要求我们客观地而不是主观地、联系地而不是孤立地、发展地而不是静止地、全面地而不是片面地、系统地而不是零散地观察事物把握事物的本质和发展规律找到解决问题的方法和途径。尤其要以问题为导向善于正确分析矛盾在对立中把握统一、在统一中把握对立克服极端化、片面化善于运用辩证思维谋划事业发展。②历史思维能力是辩证思维与历史眼光的结合是马克思主义科学历史观的具体表现和实践运用是以史为鉴、知古鉴今善于运用历史眼光认识发展规律、把握前进方向、指导现实工作的能力。③系统思维能力是从事物相互联系的各个方面及其结构和功能进行系统思考的能力就是全面系统地分析和处理问题的能力。提高系统思维能力就是要坚持系统观念用系统思维的方法分析和处理问题。④战略思维能力强调思维的整体性、全局性、长期性是高瞻远瞩、统揽全局、善于把握事物发展总体趋势和方向的能力。⑤底线思维能力是我们在认识世界和改造世界的过程中根据我们的需要和客观的条件划清并坚守底线尽力化解风险避免最坏结果同时争取实现最大期望值的一种积极的思维。⑥创新思维能力是对常规思维的突破是破除迷信超越陈规善于因时制宜、知难而进、开拓创新的能力。英语2026/5/21①Even though theday-to-dayexperience of raising kids can be soul-crushinglyhard, Senior writes that the very thingsthat in the momentdampenour moodscan later be sources ofintensegratificationand delight.尽管养育孩子的日常经历可能会非常艰难但老前辈写道“那些在那一刻让我们情绪低落的事情后来可能会成为强烈满足和快乐的来源。day-to-day adj. 日常的每天的crushingly adv. 让人受不了地过分地dampen v. 弄湿使沮丧减轻intense adj. 紧张的强烈的密集的gratification n. 满足②More than 60,000 people have purchased the PTKssince they first became available without prescriptions last year, according to Doug Fogg, chief operating officer of Identigene,which makes theover-the-counterkits.据非处方药盒制造商Identigene的首席运营官道格·福格(Doug Fogg)说自去年首次推出无需处方的PTK以来已有超过6万人购买了这种药物。prescription n. 处方over-the-counter adj. 不需要处方可以出售的直接交易kit n. 成套工具数学2026/5/21专业课2026/5/21B树B-树m阶B树所有结点的平衡因子均等于0的m路平衡查找树①每个结点至多右m棵子树即每个结点至多有m-1个关键字②若根结点不是叶结点则根结点至少有2棵子树即根结点至少有1个关键字③除根结点外的所有非叶结点至少有⌈m/2⌉棵子树即非叶结点至少有⌈m/2⌉-1个关键字。④非叶结点结构内部节点nP0K1···KnPnn为该结点的关键字的个数P为指向大于P前一个K且小于后一个K的指针K为关键字⑤所有叶结点都在同一层次上且不带信息本质上就是NULL结点外部节点查找查找关键字①在B树中找结点——————B树存储在磁盘上该查找在磁盘上进行的②在结点内找关键字——————将找到的结点读入内存该查找在内存中进行的因此B树的高度磁盘的存取次数插入插入关键字①定位——————插入位置为最底层的非叶结点②插入——————若结点插入后的关键字小于m直接插入。若大于m-1需要分裂分裂结点插入关键字后从中间位置⌈m/2⌉将其中的关键字分为两部分左中间结点右取出右部分自创新结点中间结点插入父结点中若父结点需要分裂同样如此下去。删除删除关键字插入的逆序涉及合并自行推理B树跟B树相似但不同 ①每个分支结点最多有m棵子树②非叶根结点至少有两棵子树其他每个分支结点至少有⌈m/2⌉棵子树③结点的子树个数与关键字个数相等不同点④所有叶结点包含全部关键字及指向相应记录的指针叶结点中将关键字按大小顺序排列并且相邻叶结点按大小顺序相互链接起来支持顺序查找不同点⑤所有分支结点可视为索引的索引中仅包含它的各个子结点下一级的索引块中关键字的最大值及指向其子结点的指针不同点所以B树用于索引表散列Hash表散列函数哈希函数一个把查找表中的关键字映射成该关键字对应的地址的函数记为Hash(key)Addr这里的地址可以是数组下标、索引或内存地址等冲突散列函数可能会把两个或两个以上的不同关键字映射到同一地址同义词发生冲突的不同关键字散列表哈希表根据关键字而直接进行访问的数据结构时间复杂度O(1)与表中元素的个数无关散列函数的构造方法构造方法规则是否冲突适用问题直接定址法H(key) key 或 H(key) a*keyb否分布基本连续若分布不连续空间浪费除留余数法H(key) key%p视P而定最常用选好P数字分析法数码分布均匀的若干位为散列地址视情况而定关键字换需重新构造散列函数平方取中法关键字的平方值的中间几位为散列地址视情况而定关键字的每位取值都不够均匀处理冲突的方法①开放定址法表中可存放新表项的空闲地址既向它的同义词表项开放又向它的非同义词表项开放。H(key)为散列函数i1,2,…,k(k≤m-1)m表示散列表表长d_i为增量序列取定某一增量序列后,对应的处理方法就是确定的取法d_i 规则问题线性探测法1,2,...,m-1冲突时查看下一个单元循环地址m-1单元下一个为0直到找到一个恐袭案单元本来该在i位置发现被占了大量元素在相邻的散列地址上聚集起来查找效率降低平方探测法1²,-1²,2²,-2²,...,k²,-k²k≤m/2m必须是一个可以表示4k3的素数较好的处理冲突方法避免“堆积聚集”问题至少只能探测到一半单元而非全部双散列法i*Hash(key)引入新哈希函数伪随机序列法伪随机数序列②拉链法链接法chaining为避免非同义词发生冲突可以把所有的同义词存储在一个线性链表中拉链法适用于经常进行插入和删除的情况考法给定一个H(key)和表长并使用某一处理冲突的方法①得到散列表②计算关键字的平均查找长度ASL来两道LeetCode题搜索插入位置给定一个排序数组和一个目标值在数组中找到目标值并返回其索引。如果目标值不存在于数组中返回它将会被按顺序插入的位置。请必须使用时间复杂度为O(log n)的算法。示例 1:输入: nums [1,3,5,6], target 5 输出: 2示例 2:输入: nums [1,3,5,6], target 2 输出: 1示例 3:输入: nums [1,3,5,6], target 7 输出: 4题解int searchInsert(int* nums, int numsSize, int target) { int low 0, high numsSize - 1, mid; while(low high) { mid (low high)/2; if(nums[mid] target) { return mid; }else if(nums[mid] target) { low mid 1; }else { high mid - 1; } } return low; }在排序数组中查找元素的第一个和最后一个位置给你一个按照非递减顺序排列的整数数组nums和一个目标值target。请你找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值target返回[-1, -1]。你必须设计并实现时间复杂度为O(log n)的算法解决此问题。示例 1输入nums [5,7,7,8,8,10], target 8 输出[3,4]示例 2输入nums [5,7,7,8,8,10], target 6 输出[-1,-1]示例 3输入nums [], target 0 输出[-1,-1]题解/** * Note: The returned array must be malloced, assume caller calls free(). */ int* searchRange(int* nums, int numsSize, int target, int* returnSize) { int *result (int *)malloc(2 * sizeof(int)); result[0] -1; result[1] -1; *returnSize 2; int low 0, high numsSize - 1, mid; if(numsSize 0) { return result; } while(low high) { mid (low high)/2; if(nums[mid] target) { if(result[0] -1 result[1] -1) { result[0] mid; result[1] mid; }else{ int left mid - 1; while(left ! -1 nums[left] target) { result[0] left; left--; } int right mid 1; while(right ! numsSize nums[right] target) { result[1] right; right; } return result; } }else if(nums[mid] target) { low mid 1; }else { high mid - 1; } } return result; }