算法基础
报的算无敌
向前走,不回头
展开
-
单链表的基本操作(插入、删除等)
废话不多说,直接上代码!#include<stdio.h>#include<stdlib.h>#include<malloc.h> typedef struct LNode{ int data; struct LNode*next;}LNode;LNode *CL(int len){ LNode*L=(LNode*)malloc(sizeo...原创 2020-01-08 16:47:54 · 278 阅读 · 0 评论 -
二叉搜索树(BST)的创建、插入、删除、查找
具体的算法只提供有关插入、查找的算法,因为考试会考,其他做好非代码级的理解就好,如有必要我会在最近两天更新,这两天没更,就是不会更了。1.创建创建一棵二叉树遵循:元素按顺序逐个放入,第一个为根节点,然后后面每个进来的比他大的放右边,比它小的放左边,进行下沉操作,它的每棵子树也是一样。如图:2.插入其实创建的实质就是不断地插入。插入操作很好理解,我们先看下面的图:...原创 2020-01-08 15:34:01 · 458 阅读 · 0 评论 -
hash平均查找长度(ASL)的计算(成功/不成功)
成功的ASL很简单,就是首先确定你要找的那个值,然后用hash进行查找计算,如果直接找到就是1次,如果hash(不一定就是原来的hash)的计算不止一次,就按你找到总共的次数计入。然后再套用公式计算就可以了,公式如下:Ci主要问题在于不成功的ASL的计算:不成功的n就是哈希函数的取值个数hash的取值个数和模数有关,有多少模数n就等于多少后面每次查找的失败的次数,你可以想象成我...原创 2020-01-07 21:52:49 · 3802 阅读 · 0 评论 -
hash表装载因子(load factor)的计算
今有表长为10的hash表,里面包含7个元素,所以它的装载因子为: 7 / 10 = 0.7装载因子的计算结果请注意使用小数表示。...原创 2020-01-07 21:20:49 · 7098 阅读 · 0 评论 -
hash表的冲突解决方法
前要知识:hash表有多大就要开多少个空间,记得从0开始。1.链地址法(又称拉链法、开链法等)Separate chaining hash table如图所示,今有若干数据,将其使用链地址法存储起来,其示意图如下,如果冲突了就把他接在别人的屁股上,真的是相当方便和简单呢。2.开放地址法开放地址法主要有三种方法: 线性探查法(l...原创 2020-01-07 21:02:07 · 616 阅读 · 0 评论 -
几种简单算法的时间复杂度
1.堆排序:O(nlgn)2.直接插入排序:O(n^2)3.希尔排序:O(n^(1.3—2))4.快速排序、归并排序:O(nlogn)原创 2020-01-07 17:07:25 · 729 阅读 · 0 评论 -
异位词的算法逻辑分析
所谓异位词如 "cat" 和 “act",他们都有同样数量的字母,词中每个字母的数量相同但是有些位置不同就可以称为异位词,再比如示例 1:输入: s = "anagram", t = "nagaram";输出: true;示例 2:输入: s = "rat", t = "car";输出: false;算法的基本思路:1.先比较各个词的长度,如果相同就继续运行,不...原创 2020-01-07 16:58:49 · 357 阅读 · 0 评论 -
堆排序算法简明指导
它的是复杂度为:O(nlgn);1.从最后一个非叶子节点开始,比较三个元素(非叶子节点和它的左右节点)的大小 如果这个非叶子节点最大,不用调整这颗子树,如果不是,则把这三个元素中最大的那个交换到这个非叶子节点的父节点,另一个无需变化。2.接着都已三个小节点为最小单位,从右子树逐级递归到左子树最后调整中间的。可以形象的表示为:这样一来,堆排序的第一步,构建一个初始大根堆的...原创 2020-01-07 16:47:11 · 890 阅读 · 0 评论 -
二维数组的多种排序方法(数据结构实验)
某个二维数组存放了一系列的字符串,试利用排序的一些算法(请利用不少于两种算法实现排序,如插入、冒泡、快速排序、堆排序等)对这些字符串按照字典顺序进行排序。例如:二维数组的字符串如下:char s[][20]={“while”,”if”,“else”,”do”,“for”,”switch”,“case”};本人使用了直接插入排序、快速排序以及堆排序三种算法对二维数组进行排序;下面的...原创 2019-12-15 10:34:15 · 2401 阅读 · 1 评论 -
动态规划之MAXSUM(ACM)
DescriptionGiven a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14....原创 2019-05-05 16:53:13 · 537 阅读 · 1 评论 -
中序转后序代码详解以及实现(C++)
前两天收到了一个作业题,讲的是把中序表达式表示成逆向波兰表达式,但是没理解,按照网上的方法做了下,搞了半天,发现总差一点,检查了一下代码,发现是在比较操作符优先级时出错了下面对它的完整考虑方法读入的括号必须是英文状态下的!其算法的完整思路应该是:当轮到的a[i]的是数子时,直接输出出来; 当读取的是运算符时,不直接输出,先入栈存储(存储是针对栈中无其他运算符),然后进行优先级的比...原创 2019-04-16 22:15:36 · 1278 阅读 · 2 评论 -
动态规划之Common Subsequence(ACM)
DescriptionA subsequence of a given sequence is the given sequence with some elements (possible none) left out. Given a sequence X = <x1, x2, ..., xm> another sequence Z = <z1, z2, ..., zk&...原创 2019-04-11 16:11:59 · 662 阅读 · 0 评论 -
ACM之数字三角形(动态规划)
Description在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?已经告诉你了,这是个DP的题目,你能AC吗?Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的...原创 2019-04-11 14:24:29 · 631 阅读 · 0 评论