算法
hippo_lovely
这个作者很懒,什么都没留下…
展开
-
回溯思想——八皇后问题
首先描述一下8皇后问题: 在8x8的国际象棋棋盘上,放上八个皇后,使得每一个皇后都不能直接吃掉其他的皇后。在国际象棋中,皇后可以吃掉同行、列、45°线、135°线上的其他子。介绍一下回溯法: 回溯法与穷举法非常相似,只是通过“剪枝”的思想,减少穷举的次数。可以将回溯法理解为一种加强版的穷举法。 首先来介绍一下穷举法解八皇后问题,可以这样想:...原创 2018-09-16 10:55:10 · 378 阅读 · 0 评论 -
每个程序员半小时内必须解决的5个编程问题(C语言实现)
最近关注的几个算法的公众号都看到了如题的一篇文章,后1道题单拿出来我肯定不能半个小时内解决。前三道题非常基础,相信大部分人能用自己熟悉的语言很快解决,而且解决的方法可以多种多样,这里说一下我对于最后两题的分析以及代码。问题4 编写一个能将给定非负整数列表中的数字排列成最大数字的函数。例如,给定[50,2,1,9],最大数字为95021。 分析...原创 2018-09-17 22:31:28 · 1238 阅读 · 0 评论 -
算法导论学习笔记01——算法时间复杂度
1、时间复杂度定义定义:对于函数 存在函数 和常数 ,当 时,满足不等式:,则称 是 的一个渐进紧确界。记做: 或 。当只有一个边界时,就是渐进上界或渐进下届:对于函数 存在函数 和常数 ,当 时,满足不等式:,则称 是 的一个渐进上界。记做: 。对于函数 存在函数 和常数 ,当 时,满足不等式:,则称 是 的一个渐进下界。记做:。当边界只能大于(小于...原创 2018-11-03 23:30:21 · 817 阅读 · 0 评论 -
算法导论学习笔记02——最大子数组问题
最大子数组问题:输入一个数组A,在数组A的众多非空连续子数组中,找到和最大的一个。目录暴力求解方法分治思想求解分治思想C代码测试脚本 暴力求解方法 对一个长度为A的数组,可以存在个非空连续子数组,我们可以暴力求得所有非空连续子数组的和,输出和最大的一个。伪代码如下: FIND-MAXIMUN-SUBARRAY(A, low, hi...原创 2018-11-13 15:23:08 · 641 阅读 · 0 评论 -
算法导论学习笔记03——堆与堆排序
目录1 堆1.1 堆的定义1.2 大根堆、最大优先队列2 堆排序3 C代码与测试3.1 堆排序C代码3.2 测试代码 首先介绍什么是堆,以及大(小)根堆和最大(小)优先队列;然后介绍堆排序算法;最后给出堆排序的C代码和测试脚本。1 堆1.1 堆的定义 (二叉堆)是一个数组,它可以被看成一个近似完全的二叉树,树上的每一个节点...原创 2018-12-02 23:13:40 · 298 阅读 · 0 评论 -
算法导论学习笔记05——求一个数列中第N大的数字
本篇文章根据快速排序的分治思想在排序的情况下求解一个数列中第N大的数字。关于快速排序的原理和实现算法导论学习笔记04——快速排序。 快速排序中介绍了一种PARTITION()函数,它将原数组A[r]使用一个主元x(A[]的某个成员)换分成大于x和小于x的两部分。PARTITION()执行后,主元x被交换到A[r]的k位置,并满足A[0 ~ k-1]都小于A[k],...原创 2019-07-14 18:03:45 · 456 阅读 · 0 评论 -
文件名排序(自然序)
文件名就是一个字符串,在对两个文件名进行比较时,当文件名中有数字时,仅仅按照字典序逐个字符的比较会出现如下不合理的情况: 文件:10_a, 11_a, 100_a 排序的结果是10_a, 100_a, 11_a对文件名排序的比较函数C实现如下:#include <stdio.h>#include <ctype.h>#inclu...原创 2019-07-14 18:53:20 · 1096 阅读 · 0 评论 -
算法导论学习笔记04——快速排序
快速排序期望时间复杂度为nlg(n),最坏情况下时间复杂度为n^2。其满足空间原址性:任何时候都只需要常数个额外空间存放临时数据。是否满足稳定性(假定在待排序的记录序列中,存在多个具有相同的关键字的记录,经过排序,这些记录的相对次序保持不变)由PARTITION函数的具体实现决定。 快速排序的原理是使用PARTITION函数将输入数组分成3部分:ARRAYa,AR...原创 2019-07-09 23:35:39 · 1281 阅读 · 0 评论 -
算法导论学习笔记06——二叉搜索树
二叉搜索树以二叉树的形式阻止数据,每个节点除了记录key值和卫星数据(非key值的数据)外,还需要三个指针:left(指向左孩子)、right(指向右孩子),p(指向其父亲)。 二叉搜索树是一种特殊的二叉树,并满足特性:如果x是二叉搜索树中一个节点,如果y是x左子树中的一个节点,那么必有y.key<=x.key。同理,如果y是x右子树中的一个节点,那么必有y...原创 2019-07-17 23:48:15 · 240 阅读 · 0 评论