随笔分类 -  随笔--算法

摘要:Python3之hashlib 【转】 阅读全文
posted @ 2018-09-12 04:44 阿谋 阅读(1260) 评论(0) 推荐(0)
摘要:时间复杂度: 可以理解为程序的运算步骤n为项目的规模, 时间复杂度表示为T(n) 渐进函数: 时间复杂度一般都为项目所有的运算步骤的渐进函数 渐进函数特征:忽略常数项 ex: k为常数项 T(n) = n ^ 3 * k g(n) = n ^ 3 T(n) = k * n ^ 3 g(n)就是T(n 阅读全文
posted @ 2018-05-22 20:06 阿谋 阅读(789) 评论(0) 推荐(1)
摘要:二叉树的实现: 简洁版: class Node(object): def __init__(self, item): self.elem = item self.lchild = None self.rchild = None class Binary_Tree(object): def __ini 阅读全文
posted @ 2018-05-19 16:47 阿谋 阅读(344) 评论(0) 推荐(0)
摘要:二叉树 二叉树的基本概念 二叉树是每个节点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree) 二叉树的性质(特性) 性质1: 在二叉树的第i层上至多有2^(i-1)个结点(i>0)性质2: 深度为k的二叉树至多有2^k - 1个结点 阅读全文
posted @ 2018-05-18 23:12 阿谋 阅读(229) 评论(0) 推荐(0)
摘要:二叉树的遍历 树的遍历是树的一种重要的运算。所谓遍历是指对树中所有结点的信息的访问,即依次对树中每个结点访问一次且仅访问一次,我们把这种对所有节点的访问称为遍历(traversal)。那么树的两种重要的遍历模式是深度优先遍历和广度优先遍历,深度优先一般用递归,广度优先一般用队列。一般情况下能用递归实 阅读全文
posted @ 2018-05-18 23:12 阿谋 阅读(194) 评论(0) 推荐(0)
摘要:​二分查找: 前提条件: 基本思想 时间复杂度: 顾名思义: 劈半查找, 每次只寻找当前序列的一半, 总会被劈成一个个长度为一的小序列, 此过程需要n步 即: 时间复杂度 --> O(log2^n) --> (是以2为底,n的对数)--> O(logn) 精简版: def bin_search(da 阅读全文
posted @ 2018-05-18 22:34 阿谋 阅读(320) 评论(0) 推荐(0)
摘要:一、堆排序概述 当你看到这里请去原作者那里点个赞, 原文链接 1.堆是一种数据结构 可以将堆看作一棵完全二叉树,这棵二叉树满足,任何一个非叶节点的值都不大于(或不小于)其左右孩子节点的值。 2. 堆的存储 一般用数组来表示堆,若根节点存在于序号0处,i结点的父结点下表就为(i-1)/2,i结点的左右 阅读全文
posted @ 2018-05-18 17:10 阿谋 阅读(2985) 评论(0) 推荐(0)
摘要:快速排序 个人思绪很混乱, 建议直接看原文 简洁版: def PARTITION(A, p, r): x = A[r] # 锚点 主元{大于它放一边,小于的放另一边} i = p - 1 for j in range(p, r): if A[j] <= x: i += 1 A[i], A[j] = 阅读全文
posted @ 2018-05-17 23:09 阿谋 阅读(194) 评论(0) 推荐(0)
摘要:原版文章: 题解: 寻找未排序数组的中位数,简单粗暴的方法是先排序后输出中位数索引处的数,但是基于比较的排序算法的时间复杂度为 O(nlogn)O(n \log n)O(nlogn), 不符合题目要求。线性时间复杂度的排序算法常见有计数排序、桶排序和基数排序,这三种排序方法的空间复杂度均较高,且依赖 阅读全文
posted @ 2018-05-17 22:38 阿谋 阅读(759) 评论(0) 推荐(0)
摘要:归并排序 描述: 归并排序是采用分治法的一个非常典型的应用。归并排序的思想就是先递归分解数组,再合并数组。 合并: 将数组分解最小之后,然后合并两个有序数组,基本思路是比较两个数组的最前面的数,谁小就先取谁,取了后相应的指针就往后移一位。然后再比较,直至一个数组为空,最后把另一个数组的剩余部分复制过 阅读全文
posted @ 2018-05-16 14:43 阿谋 阅读(213) 评论(0) 推荐(0)
摘要:快排 描述: 基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 我的理解: 1. 在列表内, 设置一个基准值, 找到该基准值的正确位置, 该 阅读全文
posted @ 2018-05-15 12:18 阿谋 阅读(331) 评论(0) 推荐(0)
摘要:希尔排序 描述: 原理: 时间复杂度: 稳定性: 不稳定 希尔排序演示: 代码实现: 简洁版: def Shell_sort(L): n = len(L) step = len(L) // 2 while step > 0: for i in range(step, n): while i >= s 阅读全文
posted @ 2018-05-14 17:00 阿谋 阅读(162) 评论(0) 推荐(0)
摘要:插入排序 描述: 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。 工作原理: 插入排序原理很简单,讲一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有 阅读全文
posted @ 2018-05-05 13:56 阿谋 阅读(188) 评论(0) 推荐(0)
摘要:选择排序 描述: 选择排序(Selection sort)是一种简单直观的 "排序算法" 。它的工作原理是每一次从 待排序 的 "数据元素" 中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 基本思想: 第1趟,在待排序记录r[1]~r[n]中选出最小的记录,将它 阅读全文
posted @ 2018-05-04 19:34 阿谋 阅读(232) 评论(0) 推荐(0)
摘要:冒泡排序 描述: 1. 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 2. 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名“冒泡排序”。 原理: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素作同样的工作 阅读全文
posted @ 2018-05-04 17:17 阿谋 阅读(237) 评论(0) 推荐(0)
摘要:算法的性能评价 空间复杂度和时间复杂度 一个算法的优劣往往通过算法复杂度来衡量,算法复杂度包括时间复杂度和空间复杂度。 时间复杂度 时间复杂度是算法的所需要消耗的时间,时间越短,算法越好。可以对算法的代码进行估计,而得到算法的时间复杂度。 一般来说,算法代码简短精悍可以用来减少算法的时间复杂度! 空 阅读全文
posted @ 2018-05-03 22:07 阿谋 阅读(452) 评论(0) 推荐(0)
摘要:排序算法: 描述: 是一种能将一串数据一招特定顺序进行排序的算法 稳定性的理解: 假定在 待排序 的记录序列中, 存在多个具有相同关键字的记录, 若经过排序, 这些记录的 相对次序保持不变 即: 在原序列中, a=b, 且a在b之前, 而排序后, a仍在b之前, 则称为这种排序算法是稳定的, 否则称 阅读全文
posted @ 2018-05-03 16:35 阿谋 阅读(739) 评论(0) 推荐(0)