算法_Algorithm
道格拉斯范朋克
中间件
展开
-
K选取问题
K-选取(K-selection)题目描述:从一组无序数组中,找出第k大的元素。即任意一组可比较大小的序列,找到从小到大次序为k的元素。如果把这组元素排序为S,那么S[k]就是秩为k的元素。特例:最大值(n-1选取)、最小值(0-选取)、中位数查找(k = )中位数概念:有序序列S长度为n,S[]为中位数或者中值。众数(majority):在无序向量中,若有一半以上的元素的值相...原创 2020-02-28 11:39:37 · 398 阅读 · 0 评论 -
实例----十进制数n转化为任意进制
题目描述:对于任意整数n,转化成x进制的表达形式算法分析:算法实现://十进制正整数n到base进制的转换static const char baseNum[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };void convert ( st...原创 2020-02-28 10:02:51 · 525 阅读 · 2 评论 -
排序算法-快速排序
源代码git地址算法原理:轴点的概念:任意序列S[lo,hi],对应的有序向量为[lo,hi]。若把S分为前后两个子序列,S[lo,mid)/S[mid,hi)。如果mid为轴点,那么则满足:S[mid]=[mid] 前后子序列的成员完全相同例如:[1,2,4,5,77,88,99]和[4,2,1,5,88,99,77],那么5就是序列的轴点。前后序列完成排序后,整体即可排序。...原创 2020-02-27 16:28:44 · 178 阅读 · 0 评论 -
排序算法-归并排序
源代码git地址算法原理:建立在归并操作上的一种有效的排序算法,该算法是采用分治法的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。不变形:。适应范围:实际应用:算法实现:template <typename T> //valid(p)&&...原创 2020-02-21 22:51:56 · 129 阅读 · 0 评论 -
排序算法-选择排序
源代码git地址算法原理:始终将两个序列分为两个部分:待排序前缀,有序后缀,且前缀不大于后缀。反复迭代,取出未排序数据中最大值,放入到有序序列最小的位置(最前端)。不变形:任意时刻,前缀区间s[0,r]总小于等于后缀s(r,n),后缀s(r,n)总有序。适应范围:向量或者链表等任何序列结构体实际应用:算法实现://列表的选择排序算法:从p开始的n个元素排序(valid...原创 2020-02-21 22:13:43 · 168 阅读 · 0 评论 -
排序算法-插入排序
源代码git地址算法原理:始终将两个序列分为两个部分:有序前缀,待排序区别。反复迭代,取出未排序数据首元素,在已排序序列中从后向前扫描,找到相应位置并插入。适应范围:向量或者链表等任何序列结构体实际应用:打牌的时候排列扑克算法实现:template <typename T> //valid(p)&&rank(p)+n<_sizevoid...原创 2020-02-21 21:44:19 · 154 阅读 · 0 评论 -
唯一化算法
源代码git地址对于无序列表的唯一化算法:从前往后依次处理节点p,在p的前驱中查找(通过find函数)值相同者,则调用remove函数将相同者删除template <typename T>//删除重复元素,返回删除元素个数int List<T>::deduplicate(){ ListNodePtr pHead = _header; ListNode...原创 2020-02-12 14:08:55 · 713 阅读 · 0 评论 -
幂函数实现
题目描述:幂函数的实现算法分析://非负整数计算幂函数2^n//O(n) = O(2^r),r为输入指数n二进制位数,即比特位数__int64 power1(int n){ __int64 rnt = 1;//O(1) for (int i = 0; i < n; i++ )//O(n) { rnt <<= 1; //rnt *= 2;倍增,/...原创 2020-01-14 21:09:17 · 1223 阅读 · 0 评论 -
数组求和
题目描述:计算给定的n个整数的和。算法分析:算法实现一、int sum(int A[], int len){ int ret = 0; for(unsigned int i = 0; i < len; i++) { sum += A[i]; } return ret;}算法名称 时间复杂度(平均) 时间复杂度(最坏) 时间复杂...原创 2019-12-22 21:48:16 · 209 阅读 · 0 评论 -
算法基础概念
就地算法(in-place argorithm):仅需O(1)的辅助空间的算法递归:函数和过程调用的一种特殊形式,即函数和过程进行自我调用。递归基base case of recursion:递归的有穷性的平凡情况 线性递归linear recursion:更深一层只有一个递归实例 多递归基:...原创 2019-12-22 21:37:23 · 525 阅读 · 0 评论 -
实例----二进制展开位中1的个数
题目描述:对于任意非负整数,求二进制展开位中的1的个数算法分析:算法实现:#include <iostream>using namespace std;int countOnes(unsigned int n){ int ret = 0; while(n) //数据仍然大于0 { if(n & 1) //如果二进制...原创 2019-12-22 21:31:28 · 229 阅读 · 0 评论 -
排序算法-冒泡排序
算法原理:从数组中第一个数开始,依次遍历数组中的每一个数,通过相邻比较交换,每一轮循环下来找出剩余未排序数的中的最大数并“冒泡”至数列的顶端。算法实现:#include "bubble.h"void bubblesort ( int A[], int len ) { //int legth = sizeof(A) / sizeof(a[1]);这儿的A是个指针,计算结果为1...原创 2019-12-03 18:47:06 · 172 阅读 · 0 评论 -
算法基础总结
1、工作多年,发现算法能力弱化。从现在开始,从头开始学习,让自己成为一个熟练手从前也一直觉得能力可以,面试的时候算法总是被嘲讽,心里还有点不服气,算法面试不好,不代表能力不好。也会想,工作中“面试官”们能用到这么多算法么?实际这个想法是错误的,就跟学习数学有多大用一样无知实际上,也有点自欺欺人。即使能力不错,算法不好还是影响自己成为一个更好的“”工程师”算法涉及的基础概念收集...原创 2019-11-15 14:59:59 · 269 阅读 · 0 评论