摘要: 一、算法描述 高精度加减法讨论的是两个大整数之间的运算。 而这里高精度乘除法讨论的是一个大整数和一个小整数之间的关系。 算法思路: 还是模拟小学的乘法列竖式,只不过此时不太一样,原本的列竖式是一位一位的乘,这里需要改变一下思路。 这里直接把小整数当成一个数,所乘的数直接当成进位参与运算即可。 每次进 阅读全文
posted @ 2023-10-15 22:21 grave-master 阅读(111) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 要实现两个高精度数的减法,和高精度加法一样都是模拟竖式计算的过程,主要就是解决以下两个问题。 谁大谁小? 由于这两个数字都很大,但是不知道谁更大,所以要先判断哪个数更大,思路如下: 判断这两个数谁的位数更大,位数更大的自然更大。 如果位数不相同,从最高位开始往低位遍历,判断两个数字是否 阅读全文
posted @ 2023-10-13 22:17 grave-master 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 高精度问题是指两个数字非常大,超过了int,甚至long long的范围,数字的位数甚至能达到\(10^5\),那么如果要实现这样两个大数字的运算,需要解决以下两个问题: 如何存储? 这样的两个数字相加是不可能用普通类型来存储的,所以我们第一个要解决的问题就是如何存储高精度数。 首先读 阅读全文
posted @ 2023-10-13 11:12 grave-master 阅读(68) 评论(0) 推荐(0) 编辑
摘要: 一、算法简介 浮点数二分相比与整数二分就要简单很多了,但是还是要注意范围的问题。 以下给出一个小例子,求 \(x\) 的平方根,\(x\) 的范围在 \([0, 10000]\) 内: #include <iostream> #include <cmath> using namespace std; 阅读全文
posted @ 2023-10-12 22:42 grave-master 阅读(53) 评论(0) 推荐(0) 编辑
摘要: 一、算法简介 二分法,即二分搜索法,是通过不断缩小解可能存在的范围,从而求得问题最优解的方法。 例如,如果一个序列是有序的,那么可以通过二分的方法快速找到所需要查找的元素,相比线性搜索要快不少。 此外二分法还能高效的解决一些单调性判定的问题。 二分的关键不在于单调性,或者说二分的本质并不是单调性。 阅读全文
posted @ 2023-10-11 23:33 grave-master 阅读(187) 评论(0) 推荐(0) 编辑
摘要: 一、题目来源 AcWing算法基础课-788.逆序对的数量 二、题目描述 给定一个长度为 \(n\) 的整数数列,请你计算数列中的逆序对的数量。 逆序对的定义如下:对于数列的第 \(i\) 个和第 \(j\) 个元素,如果满足 \(i < j\) 且 \(a[i] > a[j]\),则其为一个逆序对 阅读全文
posted @ 2023-10-11 17:15 grave-master 阅读(50) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 归并排序,是创建在归并操作上的一种有效的排序算法。 算法是采用分治法的一个非常典型的应用,且各层分治递归可以同时进行。 归并排序思路简单,速度仅次于快速排序,为稳定排序算法,一般用于对总体无序,但是各子项相对有序的数列。 思路如下: 取分界点,int mid = (l + r) / 2 阅读全文
posted @ 2023-10-10 17:26 grave-master 阅读(39) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 在我们求一组元素的第\(K\)大值或者前\(K\)大值时,可能最先想到的是对元素进行排序,然后选择第\(K\)大的或者前\(K\)大的值。 不过我们只是想取第\(K\)大的数,有必要将整组元素进行排序吗?当然不必,这就是我们将要介绍的快速选择算法,其时间复杂度可以达到\(O(n)\)。 阅读全文
posted @ 2023-10-06 11:16 grave-master 阅读(62) 评论(0) 推荐(0) 编辑
摘要: 一、算法描述 快速排序算法是对冒泡排序算法的一种改进算法,在当前所有内部排序算法中,快速排序算法被认为是最好的排序算法之一。 快速排序的基本思想: 通过一趟排序将待排序的序列分割为左右两个子序列,左边的子序列中所有数据都比右边子序列中的数据小,然后对左右两个子序列继续进行排序,直到整个序列有序。 思 阅读全文
posted @ 2023-10-05 20:23 grave-master 阅读(71) 评论(0) 推荐(0) 编辑