
数据结构与算法分析
文章平均质量分 55
weixin_30746129
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java数据结构之普里姆求最小生成树
普里姆算法求最小生成树 1. 求最小生成树就是在包含n个顶点的连通图中,找出只有(n-1)条边包含所有n个顶点的连通子图, 也就是所谓的极小连通子图 算法如下: 1. 设G=(V,E)是联通网,T=(U,D)是最小生成树,V,U是顶点集合,ED是边的集合 2. 若从顶点u开始构筑最小生成树,则从集合V中取出顶点u放入集合...原创 2019-10-30 14:37:17 · 197 阅读 · 0 评论 -
java数据结构之图
图: 一种多对多的数据结构,可以使用邻接矩阵来存储数据(邻接矩阵:假如有M个点,则创建 M * M 的邻接矩阵,【0,1】点表示0到1的点,如果其值不为0,则表示0到1的权值),如果边比较少,矩阵稀疏此方式比较浪费内存;这时候可以使用邻接表来存储数据(邻接表: 创建一个长度为M的数组a[M], 其中a[0]表示第0个节点,其值为一个链表,链表立里保存的是与第0个节点相链接的点),...原创 2019-10-30 14:35:00 · 217 阅读 · 0 评论 -
java数据结构之平衡二叉树
平衡二叉树: 解决了二叉排序树退化成链表的问题,每次插入新的节点时,都判断一下树的平衡是否已经被打破(每一颗树的左右子树高度差<=1),如果发现已经打破,则根据实际情况进行左旋转、右旋转、左右双旋转、右左双旋转。代码:package cn.agan.avltree;/** * 平衡二叉树:它是一颗空树,或它的左右两个子树的高度差的绝对只不超过1,并且左右两个...原创 2019-10-23 14:29:50 · 198 阅读 · 0 评论 -
java数据结构之二叉排序树
二叉排序树: 二叉排序树的左子子树的值小于父节点的值,右子树的值大于父节点的值,与父节点相等的值可约定放在左或右子树。代码:package cn.agan.binarysorttree;public class BinarySortTree { public static void main(String[] args) { int a[] = {7,...原创 2019-10-23 10:27:26 · 168 阅读 · 0 评论 -
java数据结构之顺序二叉树和堆
1. 顺序存储二叉树底层存储数据的时候使用数组存储,顺序二叉树性质:1. 顺序二叉树通常只考虑完全二叉树;2. 第n个元素的左子节点为 2*n +1 ;3. 第n个元素的右子节点为:2*n +2;4. 第n个元素的父节点为 (n-1)/2;5. n 表示二叉树中的第几个元素(按0开始编号).代码:public class ArrBinaryTree { p...原创 2019-10-23 10:23:03 · 217 阅读 · 0 评论 -
java数据结构之插值查找和斐波那契查找
插值查找:二分查找在确定中间值的位置的时候,使用的公式为: mid = (right + left) / 2 此公式可以转换为:mid = left + (right - left) / 2 上面的公式中 1/2 我们可以进行优化: 设要查找的值为 targetVal (targetVal - a[left]) / (a[right] - a[left]...原创 2019-10-23 10:16:28 · 272 阅读 · 0 评论 -
java数据结构与算法之二分查找
二分查找思想: 待查找数组按照一定顺序已经排好序,取数组中间位置的值,如果其值与待查找的值相等,则直接找到;如果其值大于待查找的值,待查找的值一定在初始位置与中间位置内,只需要在初始位置与中间位置内继续进行二分查找即可;如果其值小于待查找的值,则待查找的值一定在中间位置与结束位置内,只需要在中间位置与结束位置内进行二分查找即可;如果直到起始位置大于结束位置都还没有找到,则可以认为待...原创 2019-10-21 10:00:53 · 163 阅读 · 0 评论 -
java数据结构与算法之基数排序
基数排序思想: 将所有待比较数值统一为同样待数位长度,数位长度较短短数值前面加0, 然后从个位开始,依次将数放入个位数上对应的桶,放完数据后,又从桶中拿出数据。接着是十位数,分别求出每一个待排序数的十位,将此数放入十位对应的桶内,放完所有数后,又依次从桶中拿出数据。。。直至完成最大位数。桶排序需要预先分配10倍的原数组大小,并且其对小数、负数支持不好。代码:publ...原创 2019-10-18 23:18:47 · 163 阅读 · 0 评论 -
java数据结构之插入排序、希尔排序、快速排序、归并排序
1. 插入排序: 先用tmp=a[j+1]保存待插入的数,在还没有找到插入点时,直接用a[j+1] = a[j],免去每一次都交换;再插入数据后就可以跳出内部循环了。代码:public class InsertSort { public static void main(String[] args) { int len = 8000; ...原创 2019-10-18 17:58:14 · 217 阅读 · 0 评论 -
java数据结构之冒泡排序及其优化
冒泡排序:外层的循环用于控制进行多少次比较,内层循环用于比较,这里注意内层循环在打到上一次交换的点后,就可以不进行了。同时,如果发现内层循环没有发生交换,则说明排序已经完成,不用再进行下去了没有优化时:数组长度为:8000, 一共进行了31996000次加了优化之后:数组长度为:8000, 一共进行了31990005次代码:package cn.agan.myso...原创 2019-10-18 09:51:19 · 136 阅读 · 0 评论 -
java数据结构之n皇后问题
n皇后问题:每一行只能有一个皇后,每一列也只能有一个皇后,这个可以用col[edg] 数组来表示某一列是否已经有皇后;对角线 / 有如下性质:对于这种方向上经过同一条线的方格,其横(i) 纵(j)坐标的和都相等 i+j, 一共有2*n-1条这种对角线;对角线\有如下性质:对于这种方向上经过同一条对角线的方格, 其横(i) 纵(j)坐标有如下关系:i - j + n - 1都相等, 一...原创 2019-10-17 16:22:58 · 228 阅读 · 0 评论 -
java数据结构与算法之走迷宫
深度优先实现了一个走迷宫程序运行:原始迷宫:1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 1 0 1 1 1 1 0 0 0 0 0 ...原创 2019-10-17 10:34:16 · 1058 阅读 · 0 评论 -
数据结构与算法分析1.1 选择问题
数据结构与算法分析-C语言实现,1.1题 实现选择问题,并打印不同N规模是运行时间:用了自己实现的快速排序法,各个N规模显示如下:root@ltegan:chapter1# ./a.out Before choose issue clock() returns: 27834 clocks-per-sec (0.03 sec)times() yields: user CPU:0.02; ...原创 2018-04-10 14:35:39 · 487 阅读 · 0 评论 -
数据结构与算法分析3.1 栈实现表达式+-*/运算
用栈实现了表达式的运算,基本功能可以实现,enhance 给QA测试一下应该可以做个简单的计算器。root@ubuntu:data-struct# cat stack_cal.c #include <stdio.h>#include <stdlib.h>#include <string.h>typedef int element_t;type...原创 2018-04-16 23:23:29 · 230 阅读 · 0 评论 -
数据结构与算法分析7.1 各种排序算法及其性能比较
写了几种常用的排序算法,并测试比较它们在不同N时花费的时间。50000以下的整数,一些结果如下:可见 在N为10和200的时候插入排序比较好;4000和10000的时候希尔排序不错,10000的时候归并排序最好,但是它需要不断的拷贝;10000以上快排有很好的效果。root@ubuntu:sorts# ./a.out Input your N:10Input your ti...原创 2018-04-23 23:46:55 · 452 阅读 · 0 评论 -
数据结构与算法分析4.1 二叉树的各自操作以及平衡二叉树的旋转调整
root@ubuntu:data-struct# cat tree.c #include <stdio.h>#include <stdlib.h>struct TreeNode;typedef struct TreeNode *Position;typedef struct TreeNode *SearchTree;typedef unsigned int...原创 2018-05-17 21:32:34 · 139 阅读 · 0 评论 -
字符串中最长不重复子串和最长回文子串算法
一) 这里用GOLANG实现了一个查找最长不重复子串的算法,在暴力查询的基础上作了优化,虽然速度还是比较慢,但是有助于理解后边高级的算法,值得一记。暴力查询的优化思路:1)如果我们已经查找到的最大子串长度比剩下没有for到的子串还长,那最大子串不可能会在发生改变了,我们就不往下找了,返回这个最大子串长度;2)这个是最重要的:在我们发现某一个字符在子串中重复时,比如" abcdccefg...原创 2018-10-29 13:04:08 · 703 阅读 · 0 评论 -
leetcode 148:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
用底分治递归方法搞了这道题,感受一下~/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func sortList(head *ListNode) *ListNode { var linkLen int ...原创 2018-11-02 16:50:45 · 2042 阅读 · 0 评论 -
N皇后问题
除了暴力回溯探测思想之外,还要能够掌握并使用每一条对角线与i,j下标的关系。每一行只能有一个皇后 -> 通过每次for只给一行填一个;每一列只能有一个皇后->通过col[n]数组来标记,哪一列放了皇后,相应的col[i] = 1;每一 \ 这种斜列只能有一个皇后 ->总共有 dia2[2n-1] 个 \ 线,每一条线上的i,j有性质:i - j + n - 1 对于每...原创 2018-11-16 16:35:16 · 124 阅读 · 0 评论 -
数据结构与算法分析2.1 双向链表及其操作
双向链表的增删改查,此双向链表没有使用空的头链表,直接第一个链表就可以存值。//cat chapter2_doublelink.h#ifndef _DOUBLE_LINK_#define _DOUBLE_LINK_typedef struct GList { int data; struct GList *prev; struct GList *next;}...原创 2018-04-15 01:03:02 · 336 阅读 · 2 评论