随笔分类 -
算法
-
查找和排序-8.希尔排序
摘要:希尔排序(1)希尔排序(shell sort)这个排序方法又称为缩小增量排序,是1959年D·L·Shell提出来的。该方法的基本思想是:设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,所有距离为increment的元素放在同一
阅读全文
-
查找和排序-7.归并排序
摘要:归并排序 归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 在无序
阅读全文
-
查找和排序-6.快速排序
摘要:快速排序 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 算法介绍 设要排
阅读全文
-
查找和排序-5.插入排序
摘要:插入排序 插入排序(Insertion sort)是一种简单直观且稳定的排序算法。如果有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而
阅读全文
-
查找和排序-4.选择排序
-
查找和排序-3.冒泡排序
摘要:冒泡排序 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。 这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),
阅读全文
-
查找和排序-2.二分查找
摘要:二分查找 二分查找也称折半查找(Binary Search),它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列。 算法要求 算法要求 1.必须采用顺序存储结构。 2.必须按关键字大小有序排列。 查找过程 查找过程 首先,假设表中元素是按升序排列,
阅读全文
-
查找和排序-1.顺序查找
摘要:基本原理: 顺序查找在初学编程时简直再熟悉不过了 基本原理: 顺序查找在初学编程时简直再熟悉不过了 对于任意一个序列以及一个给定的元素,将给定元素与序列中元素依次比较,直到找出与给定关键字相同的元素,或者将序列中的元素与其都比较完为止。 代码实现: def Linear_search(li,val)
阅读全文
-
汉诺塔问题
摘要:汉诺塔问题 汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不
阅读全文
-
算法概念
摘要:转自:https://www.cnblogs.com/xydblog/p/3565363.html 一、程序的定义 程序 = 数据结构 + 算法 程序是为了解决实际问题而存在的。然而为了解决问题,必定会使用到某些数据结构以及设计一个解决这种数据结构的算法。例如:有些交友网站能够列出你可能认识的好友,
阅读全文
-
动态规划
摘要:基本思想 基本思想 动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于
阅读全文
-
贪心算法
摘要:贪心算法概念 贪心算法(又称贪婪算法,因文名:reedy algorithm)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性
阅读全文
-
数据结构-二叉树
摘要:二叉树 在计算机科学中,二叉树是每个结点最多有两个子树的树结构。通常子树被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用于实现二叉查找树和二叉堆。 一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树。这种树的特点是每一层上的节点数都是最大节点
阅读全文
-
数据结构-哈希
摘要:首先讲讲什么是直接寻址 直接寻址表的定义假设有一个数据集合U={d1,d2,d3,...,dn}U={d1,d2,d3,...,dn},该数据集合里面的每一个元素didi都有一个对应的键值keyikeyi和数据dataidatai。集合中的任意一个keyikeyi都是在[0,m][0,m]之间的整数
阅读全文
-
数据结构-链表
摘要:链表基础知识: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结
阅读全文
-
数据结构-队列
摘要:队列(queue),是先进先出(FIFO, First-In-First-Out)的线性表,在具体应用中通常用链表或者数组来实现,队列只允许在后端(称为rear)进行插入操作, 在前端(称为front)进行删除操作,队列的操作方式和堆栈类似,唯一的区别在于队列只允许新数据在后端进行添加。 队列的接口
阅读全文
-
数据结构-栈
摘要:栈的抽象数据类型: 栈是一种用于存储数据的简单数据结构,有点类似链表或者顺序表(统称线性表),栈与线性表的最大区别是数据的存取的操作,我们可以这样认为栈(Stack)是一种特殊的线性表,其插入和删除操作只允许在线性表的一端进行,一般而言,把允许操作的一端称为栈顶(Top),不可操作的一端称为栈底(B
阅读全文
|