![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法分析
文章平均质量分 57
oscarwin
看书写码,走走停停,微信公众号:奥斯卡的成长之路
展开
-
散列/哈希表
概念散列是一种以常数平均时间执行插入,删除和查找的技术。散列的实现通过散列表和Key-Value对实现。关键字Key通过一定的规则映射到散列表的某一个单元,这个映射的规则就是散列函数。不同的关键字可能会映射到同一个单元,这种情况成为冲突或者哈希碰撞。哈希函数hash函数的构造准则:简单、均匀 1. 散列函数的计算简单,快速; 2. 散列函数能将关键字集合K均匀地分布在地址集{0,1,…,m-1}原创 2017-06-24 18:47:03 · 2815 阅读 · 0 评论 -
十进制转任意进制
十进制转任意进制采用取余倒排法原创 2017-07-20 23:09:32 · 1003 阅读 · 0 评论 -
二分查找及其变化应用
经典的二分查找两次二分查找题:统计一个数字在排序数组中出现的次数。例如输入排序数组{1, 2, 3, 3, 3, 3, 4, 5}和数字3,由于3在这个数组中出现了4次,因此输出4。分析:对于该题,如果直接遍历很容易得到出现的次数,但是其时间复杂度为O(N)。因为数组是排序的所以我们可以考虑二分查找来加快速度。通过二分查找分别找到最左边的3和最右边的3位置,就可以计算得到3的个数,算法复杂度为O(l原创 2017-08-01 23:04:42 · 423 阅读 · 0 评论 -
二叉树的前中后序遍历
本文介绍二叉树的前序,中序和后序遍历,采用递归和非递归两种方式实现。除此之外,还介绍了对二叉树按层遍历的方法。对树的前中后序遍历是深度优先搜索的策略,因此用栈实现。对树的按层遍历是广度优先搜索,因此采用队列实现。树的前序,中序和后序遍历,都是针对父节点而言的。二叉树的定义下面给出二叉树的定义:typedef Tree* binaryTree;struct Tree{ int原创 2017-06-26 22:59:34 · 4998 阅读 · 0 评论 -
字符串实现加法和乘法
通过字符串实现加法#include <iostream>#include <string>using namespace std;string add(string strLeft, string strRight){ for(string::size_type i = 0; i < strLeft.size(); ++i) { strLeft[i] -= '0'原创 2017-08-02 16:08:14 · 4736 阅读 · 0 评论 -
简易正则匹配,实现*和?
一道常见的面试题,简易的正则匹配,实现*和?/* * 简易正则表达,匹配*和? * *表示匹配任意个字符 * ?表示匹配一个字符 */#include #include int ismatch(char* regexp, char* str){ //如果匹配的字符串为空 if(*str == '\0') { if(*regexp == '\0') { r原创 2017-08-03 10:33:06 · 1060 阅读 · 0 评论 -
最详细动态规划解析——背包问题
动态规划的定义要解决一个复杂的问题,可以考虑先解决其子问题。这便是典型的递归思想,比如最著名的斐波那契数列,讲递归必举的例子。斐波纳契数列的定义如下:F(0)=1,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*) 用递归可以很快写出这样一个函数,咋一看真牛逼,几行代码就搞定了int fib(int i){ if(i <= 1) { ret原创 2017-03-16 16:38:28 · 53567 阅读 · 8 评论 -
排序算法比较
冒泡排序排序过程图片演示复杂度分析C语言代码插入排序排序过程图片演示复杂度分析C语言代码快排排序过程图片演示复杂度分析C语言代码 算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 冒泡排序 O(N2)O(N^2) O(N2)O(N^2) O(N2)O(N^2) O(1)O(1) 稳定 插入排序 O(N2)O(N^2原创 2017-07-01 14:41:02 · 2589 阅读 · 2 评论