数据结构 1、概述 特性、分类、复杂性分析

数据结构是描述非数值计算再实体中的数学模型以及在计算机中的表示方法,以及这些模型进行的操作如何在计算机中中进行操作

基本概念:

数据:所有能被输入到计算机中,且能被计算机处理的符号的集合---是计算机操作对象的总称

数据结构的逻辑组织

线性结构:线性表(表、栈、队列、串等)

非线性结构:  树(二叉树,Huffman树,二叉索引树等)

图(有向图,无向图等)

图》树》二叉树》线形图     (》包含)

数据结构的存储结构

逻辑结构到物理内存的映射

四类:顺序(存储单元的顺序地址)

链接(指针的地址指向关系)

索引(对数据建立索引的表,通过这个表可以有效找到数据)

散列(一种特殊的索引,能通过要查的关键码的映射,在整个散列表中快速找到存储的空间,把数据找出来)

抽象数据类型

栈:逻辑结构:线性表

操作特点:限制访问端口---只允许在一端进行插入、删除操作

入栈(push)、出栈(pop)【最重要】、取栈顶(top)、判栈空(isEmpty)

算法特性及简单分类

问题——算法——程序

算法特性:

通用性(反复求解同一类问题)eg:八皇后问题、N后问题解决方案类似

有效性(问题求解是有意义的)

确定性(每一个算法步骤都是明确的)

有穷性(确定时间、确定步骤,不能有死循环)

基本算法分类

穷举法:顺序寻找K值(最开始先穷举)

回溯、搜索:八皇后、图和树遍历 (回溯思想:能进则进,不能进就换,不能换就退)

递归分治:二分求K值、快速排列、归并排序

贪心法:Haffaman编码树、最短Dijkstra算法、最小生成树Prim算法

(有贪心的数据结构、每次贪心找最佳,最终找到的结构也是最佳的)

动态规划:最短路Floyd算法(小规模问题得最优解,更大规模时组合这些最优解,最后对整个大问题得到最优解)

k=input()
L=[1,2,3,4,5,6,7,8,9]
low=0
high=len(L)-1
mid=(low+high)/2
def erfen(k):
    global mid,low,high
    if L[k]>L[mid]:
        low=mid+1
        mid=(low+high)/2
        return erfen(k)
    elif L[k]<L[mid]:
        high=mid-1
        mid=(low+high)/2
        return erfen(k)
    else:
        print L[k],mid
erfen(k)

算法的复杂性分析:

大O表示法的时间运算法则

加法规则:f1(n)+f2(n)=o(max(f1(n),f2(n)))——只关心耗时最长的

顺序结构,if结构,switch结构

乘法规则:f1(n)*f2(n)=O(f1(n)*f2(n))

for,while,do-while结构(嵌套、循环)

时间: 2024-12-21 11:45:17

数据结构 1、概述 特性、分类、复杂性分析的相关文章

08 java代码块的概述和分类

08.01_面向对象(代码块的概述和分类) A:代码块概述 在Java中,使用{}括起来的代码被称为代码块. B:代码块分类 根据其位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码块(多线程讲解). 局部代码块:只要是和局部有关系的,都是和方法有关系的 局部变量:在方法声明上或者在方法内部 构造代码块与类变量谁在前先加载谁 ,所有静态的东西(静态方法和静态变量都是)只加载一次,就是在类文件加载的时候加载,类文件释放的时候释放,加载顺序为,静态,–>–>构造代码块或局部变量

NoSQL数据库的四大分类及分析

 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨.NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入. NoSQL数据库分四大类: 键值(Key-Value)存储数据库 这一类数据库主要会使用到一个哈希表,这个表中有一个特定的键和一个指针指向特定的数据.Key/value模型对于IT系统来说的优势在于简单.易

算法设计与分析——算法复杂性分析

这篇博客的内容摘自课本,针对课本中缺少的5道证明题,作为练习,给出证明. 算法运行时所需要的计算机时间资源的量称为时间复杂性.这个量应该集中反应算法的效率,并从运行该算法的实际计算机中抽象出来.换句话说,这个量应该是只依赖于要解的问题的规模.算法的输入和算法本身的函数.  如果分别用 N,I和A 表示算法要解的问题的规模.算法的输入和算法本身,而且用 T 表示时间复杂性,那么,应该有 T=T(N,I,A) .通常 A 隐含在复杂性函数名中,因而将 T 简写为 T(N,I) .现在,时间复杂性分析

日志分析方法概述 &amp; Web日志挖掘分析的方法

日志在计算机系统中是一个非常广泛的概念,任何程序都有可能输出日志:操作系统内核.各种应用服务器等等.日志的内容.规模和用途也各不相同,很难一概而论. 本文讨论的日志处理方法中的日志,仅指Web日志.其实并没有精确的定义,可能包括但不限于各种前端Web服务器--apache.lighttpd.tomcat等产生的用户访问日志,以及各种Web应用程序自己输出的日志. 在Web日志中,每条日志通常代表着用户的一次访问行为,例如下面就是一条典型的apache日志: 211.87.152.44 – - [

数据结构-堆 接口定义与实现分析(详细注释与图解)

如果想了解堆的概念,可以点击此处查看前面关于堆的定义的随笔. 堆的操作接口包括初始化堆.销毁堆.向堆中插入元素.从堆顶移除元素.堆的结点个数. 我们用heap来命名一个堆.下面是对以上接口的定义: heap_init void heap_init(Heap *heap,int (*compare)(const void key1,const void key2),void (*destroy)(void *data)); 返回值:无 描述:初始化堆heap. 在对堆执行其他操作之前,必须要对其进

NoSQL数据库的四大分类的分析

分类 Examples举例 典型应用场景 数据模型 优点 缺点 键值(key-value) Tokyo Cabinet/Tyrant, Redis, Voldemort, Oracle BDB 内容缓存,主要用于处理大量数据的高访问负载,也用于一些日志系统等等. Key 指向 Value 的键值对,通常用hash table来实现 查找速度快 数据无结构化,通常只被当作字符串或者二进制数据 列存储数据库 Cassandra, HBase, Riak 分布式的文件系统 以列簇式存储,将同一列数据存

几种内部排序-分类-复杂性-稳定性

1. 简述 本文主要说明一些常用的内部排序算法的分类.复杂性和稳定性.主要基于现在的理解和学习,详细准确的复杂度可以参见维基百科等比较权威的网站,对于一些算法的不同实现,复杂度也不同,这里给出的复杂度都是相对较好的算法的复杂度. 2. 分类    3. 复杂性和稳定性 冒泡排序:在已经有序的情况,取得O(N)的复杂度.    快速排序:每次递归都是N的复杂度,递归次数根据序列有关系,当已经有序的情况下,递归N次,时间复杂度为O(N*LogN)    插入排序:在已经有序的情况,取得O(N)的复杂

C++的标准模板库STL中实现的数据结构之顺序表vector的分析与使用

摘要 本文主要借助对C++的标准模板库STL中实现的数据结构的学习和使用来加深对数据结构的理解.即联系数据结构的理论分析和详细的应用实现(STL),本文是系列总结的第一篇,主要针对线性表中的顺序表(动态数组)STL vector进行分析和总结. 引言 因为前段时间对台大的机器学习基石和技法课程进行了学习,发如今详细的实现中经常涉及到各种类型的数据结构,比方线性表.二叉树.图等,在使用这些数据结构时感到有些吃力.主要是对一些主要的数据结构理解的不够.所以趁着暑假假期.近期一段时间总会抽出时间复习一

【数据结构】数据结构的概述

一.概述 什么是数据结构:数据:由有限的符号(比如,"0"和"1",具有其自己的结构.操作.和相应的语义)组成的元素的集合.结构:元素之间的关系的集合.数据结构:信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作.它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构. 数据结构的构成: 数据结构分为逻辑上的数据结构和物理上的数据结构.逻辑上的数据结构反映成