随笔分类 - [1]数据结构与算法
数据结构:链表,树,图;算法:常用五大算法学习总结;leetcode做题练习
摘要:一、子集树 1、子集树:若一个组合问题的解释给定集合的子集,则解向量<x1, x2,...,xn>可以表示为分量取值为{0,1}的比特串,解空间可以组成一颗完全二叉树,称这棵搜索树为一棵子集树; 2、由于解向量的每个分量均取0或1,因此可以省略解集合处理过程; 3、子集问题示例,可以参考:回溯算法三
阅读全文
摘要:问题分析过程,可以参考:回溯算法一:算法介绍与经典问题分析 算法框架分析过程,可以参考:回溯算法二:算法框架与实现 一、m-着色问题 根据问题分析以及回溯框架简化,代码实现如下: #include <stdio.h> #include <stdlib.h> #include <string.h> i
阅读全文
摘要:动态规划算法四:任意两点间的最短路径(floyd-Warshall)
阅读全文
摘要:动态规划算法二:最长公共子序列(LCS)
阅读全文
摘要:一、闭合区间模板 int binarySearch(int* nums, int numsSize, int target) { int begin = 0; int end = numsSize - 1; int mid; while (begin <= end) { mid = (begin +
阅读全文
摘要:##一、背景介绍 1、优先队列:队列中的元素被指定优先级,元素按优先级出队。针对二叉堆,根节点就为最值。队列有两个基本操作:入队和出队。 2、入队操作分析: 将待入队的元素放在堆的末尾,判断该元素与与其父节点的优先级,确定是否需要进行交换;若需要交换,则在交换后继续进行判断。 3、出队操作分析: 将
阅读全文
摘要:##一、算法思路 总体思路:利用最大堆的特性——根节点为最大值,通过将根节点与数组末端元素进行交换,并对剩余元素进行调整,依次取出剩余元素最大值,完成对整个数组进行排序。类似于冒泡排序。 step1:先根据数组,创建一个最大堆; step2:将根节点元素与数组最后一个元素进行交换,此时已经固定最大值
阅读全文
摘要:##一、二叉堆概念 1、二叉堆的数据结构,可以由一个数据对象来表示,实际上是一个完全二叉树,即除最后一层外,其他层的结点数均达到最大值,且最后一层的填充为从左到右进行。 2、数组与二叉堆的表示如下: 将数组a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}表示成
阅读全文
摘要:##一、算法思想 1、利用渐增型算法分析中的划分序列算法,针对整个序列逐步划分,每次划分会确定分界点的下标,并将原问题分解成两个小规模问题; 利用递归处理,继续分解问题; 所有分解的子问题处理完成后,整个问题也就处理完了。 2、在确定分界点的时候,采用了随机数,先用rand函数生成一个随机数,然后将
阅读全文
摘要:一、算法说明 (1)检测有序序列的中间值与指定元素是否相等,若相等则返回对应下标; (2)若有序序列的中间元素大于指定元素,则将该问题分解成在左半部分查找指定元素,进行递归处理; (3)若有序序列的中间元素小于指定元素,则将该问题分解成在右半部分查找指定元素,进行递归处理; (4)递归出口条件有两种
阅读全文
摘要:##一、问题描述 提供序列A[p...r],要求以A[r]为分界值,将原序列分两部分; 其中A[p...q-1]中元素值小于分界值,A[q+1...r]中的元素值大于分界值; 返回新序列中的分界值下标q ##二、方法一:逐个比较元素,序列整体移动 说明:逐个比较序列值,若是其值大于分界值,则将其移到
阅读全文
摘要:##一、问题描述 /* descrition:合并两个有序序列A[p...q]和A[q+1...r] input:序列指针a,元素大小size,有序序列下标p、q、r,比较函数cmp output:a整体排序,成功返回0 */ ##二、方法一:逐个比较两个序列数据 static int mergeT
阅读全文
浙公网安备 33010602011771号