
算法
HWQlet
这个作者很懒,什么都没留下…
展开
-
洗牌算法
普通的洗牌算法: 基本思想就是从原始数组中随机取一个之前没有取过的数字到一个新的数组中 python中的random中的sample就是洗牌算法 流程: 初始化原始数组和新数组,假设长度为n 从还没处理的数组(假设还剩k个)中,随机产生一个[0,k)之间的数字p 从剩下的k个数中把第p个数字取出来 重复第二步和第三步直到所有数字全部取完 从步骤三去除的数字序列便是一个打乱的序列 普通的洗牌算法时间复杂度为O(n^2),空间复杂度为O(n) 高级的洗牌算法:假设取m个数字 基本思想和普通的原创 2020-06-22 01:46:35 · 360 阅读 · 0 评论 -
怎么用rand4生成rand6,怎么通过不均匀的硬币实现均匀概率
rand4和rand6 rand4需要自己定义,大致就是从[0,1,2,3,4]里面随机抽取一个数 rand6也就是[0,1,2,3,4,5,6]中随机抽取 怎么实现呢 可以转换成 0 1 2 3 4 0 00 01 02 03 04 1 10 11 12 13 14 2 20 21 22 23 24 3 30 31 32 33 34 4 40 41 42 43 44 其实可以发现这些数字是5进制的数,比如44表示的是4*5+4=24,总共有0-24有25个数字 ran原创 2020-05-19 10:45:52 · 1272 阅读 · 0 评论 -
算法--根据前序遍历和中序遍历的数组来重建二叉树
题目来自leetcode:链接 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = [9,3,15,20,7] 结果: 3 / \ 9 20 / \ 15 7 解题思路 根据前...原创 2020-05-07 22:21:15 · 177 阅读 · 0 评论 -
动态规划--最长公共子序列
直接上代码,属于动态规划的范畴 int max_substr(string &str1, string &str2)//对源字符串进行操作 { int len1 = str1.length(); int len2 = str2.length(); vector<vector<int>>dp(len1,vector<int&g...原创 2020-05-05 22:12:59 · 167 阅读 · 0 评论 -
python实现二分查找
二分查找针对的是已经排好序的序列,这点要着重注意 原理比较简单,每次切分后与分割点的值进行比较,更大则在大数的一侧进行再切分,更小则在小数的一侧进行再切分 l = [5, 13, 26, 25, 20, 15, 65, 51, 41] # sort()是对本身进行排序,而sorted是产生新的排序的序列 li = sorted(l) low = 0 high = len(li)-1 x = ...原创 2020-04-18 10:13:52 · 1172 阅读 · 0 评论 -
python实现堆排序
堆排序思想:将数组想象成一个完全二叉树 堆排序原理:给定一个待排序序列,首先经过一次调整,将序列构建成一个大顶堆,此时第一个元素是最大的元素,将其和序列的最后一个元素交换,然后对前n-1个元素调整为大顶堆,再将其第一个元素和末尾元素交换,这样最后即可得到有序序列。 l = [5, 13, 26, 20, 15, 65, 41, 51] def heap_sort(li, length):...原创 2020-04-18 09:37:31 · 185 阅读 · 0 评论 -
python实现快速排序
快速排序思想:冒泡排序的进阶版本,也用到了分治思想和递归 快速排序原理: ①先从队尾开始向前扫描且当low < high时,如果li[high] >li[0],则high–,但如果li[high] < li[0],则将high的值赋值给low,即li[low] = li[high],同时要转换数组扫描的方式,即需要从队首开始向队尾进行扫描了 ②同理,当从队首开始向队尾进行扫...原创 2020-04-18 09:33:18 · 161 阅读 · 0 评论 -
python实现归并排序
归并排序思想:归并排序的思想是分治思想,就是把问题分成若干子问题,再子问题里面递归进行处理,然后返回原问题的解 归并排序原理:1.切分:将数组分成两部分,mid=len(arr)//2,切分到子数组只有一个元素的时候就进行第二步 2.归并:创建一个空数组,将两个子数组的元素一个一个的进行比较,小的元素先加入空数组,最后将还有剩余元素的子数组的元素全部加到空数组里面 l = [5,...原创 2020-04-18 09:21:33 · 171 阅读 · 0 评论 -
动态规划学习+理解
在leetcode上刷题刷到过很多有关于动态规划的题目,然后就去网上找各种大佬的分析,其实我这个专业虽然是计算机学院的,但是并没有上过算法课,只学过数据结构里面的一些查找排序算法,个人觉得这是学校安排的重大失误,毕竟计算机学院的数据结构,算法,计算机组成,计算机操作系统,计算机网络都是必学的内容。 我讲下动态规划学习的过程把,然后我会把一些典型的题目讲一下 动态规划需要实现的三个目标: 1....原创 2020-04-11 12:29:57 · 165 阅读 · 0 评论 -
排序算法--堆排序
重新学习数据结构里面的堆排序,堆排序是基础排序算法里面效率最好的 实现: #include <iostream> #include <cmath> using namespace std; template <class T> //n是待排序序列的长度 //p[n]是待排序序列 //这里用了template,用于泛型 void sift(T p[],in...原创 2020-01-21 17:31:26 · 119 阅读 · 0 评论 -
归并排序
归并排序有两个步骤:一个是把每个分块先排好序,然后两两归并。最终实现归并排序,有两种思路,一个是递归实现归并但是意义并不是很大,因为这会额外占用较大内存。另一种是非递归实现归并。 我这里的代码只是说明归并的实现思想: #include <set> #include <vector> #include<iostream> #include<iomani...原创 2019-01-30 10:33:40 · 135 阅读 · 0 评论 -
冒泡排序,选择排序
冒泡代码: #include<iostream> #include<string> #include<ctime> using namespace std; int main() { int n; int temp; cin>>n; int *a=new int[n]; for(int x=0;x<n;x++) { cin&...原创 2019-01-30 10:16:22 · 130 阅读 · 0 评论 -
快速排序
博前感想: 这是自己写的代码,用递归实现的,其实还可用非递归的实现。 排数组: #include<iostream> #include<cmath> #include<string> #include<algorithm> #include<vector> using namespace std; int povotkey; ...原创 2019-01-26 11:35:42 · 175 阅读 · 0 评论 -
真正的堆排序
博前感想: 事先声明,这是我从学长那的代码片段截下来的,我自己稍微改动了一点,但主要思想没变。 代码: #include<iostream> using namespace std; void swap(int &a,int &b) { int temp; temp=a; a=b; b=temp; } void HeapAdjust(int arra...转载 2019-01-26 11:28:49 · 124 阅读 · 0 评论 -
堆排序
博前感想: 这是我学的一些算法,以及自己思考写的一些代码,但是我的水平实在是有点差,希望大家给我一些建议和意见,这个堆排序是我自己写的,但好像错了,但还是给大家吧。 代码: #include<iostream> #include<cmath> #include<string> #include<vector> #include<algo...原创 2019-01-26 11:24:16 · 171 阅读 · 0 评论