`
kimmking
  • 浏览: 538853 次
  • 性别: Icon_minigender_1
  • 来自: 中华大丈夫学院
社区版块
存档分类
最新评论

《算法基础讲座》part1

阅读更多

时间:2009-11-12 16:30

地点:JE群9770785     extjs群88403922     sm.net群75462710

 


各位群友,大家好。

今天开始,我将和大家聊聊基础算法。

欢迎大家和我一些学习或是复习一些很基础的东西。

共同讨论,共同进步。

 

 

一 什么是算法

 

算法是什么呢?

计算的方法

算法英文是algorithm,和算术arithmetic很像。

算法的本质就是更合理的计算。
不过这个计算的主体,不是人,而是机器,一般特指计算机。

要搞清楚算法到底是什么,有什么特点,就得先谈谈为什么会有算法。

我们知道,计算机上最基本的可调用的硬件资源是cpu和内存硬盘。

其中cpu直接执行指令,内存硬盘用来保存数据。

程序就是指令和数据的结合体。

这样,一个问题就出现了,对于既定问题,如何更有效的利用现有的资源,优化指令和数据本身。

这样,算法的一个基本概念就讨论出来了:研究计算机计算问题的计算过程和数据结构。

而算法本身就成了一门优化上面的两个研究对象的学科。

这个两个研究对象,对应到具体算法上专有名词,就是算法的时间和空间。
或者说是时间复杂度和空间复杂度。

优化计算过程就是降低算法的时间复杂度,单位时间内更高效的利用cpu的处理能力。
优化数据的存储结构,就是减低算法的空间复杂度,更有效的利用存储空间。

算法学科的所有问题和理论都是围绕着这两个问题展开的。

为了防止某些童鞋抠字眼,我得声明下,很多情况下,牺牲时间换空间和牺牲空间换时间很常见,例如cache。

ok,清楚了算法的本质和概念后,我们再讨论算法的特点。

 

 

 

二 基本数据类型

 

cpu和存储中使用的数据,都是二进制的,一般是俺byte为单位的。

而一般情况下,编程语言中定义的基本类型有:bool byte char int long float double String.


刚才我们说了,计算机处理的是bit或byte

所以需要将各种不同的类型映射到byte上。

即用byte来表示各种不同类型的数据。


如果说算法是一座大厦,那么数据结构就是一块块的砖和石头,里面的骨架和结构,就是计算过程。

我们继续说基础的数据结构。

我们刚才说道不同类型的数据要用byte来表示。

如何表示呢?这就是编码,可以认为就是通过某种方式,将数据中的信息映射到指定的byte中去。


比如int,一般用4个byte表示。第一位是符号位,后面是2进制整数的数位。

float很复杂,一般是1 8 23表示法。

第一位是符号位,8位是指数,23位是2进制的有效数字。

所以,不能直接在这个有效数字内表示的小数,都不能精确表示,比如1/3之类的。


而这个范围内表示的最小的一个精确值,就是float里,最接近0的一个数字,float能表示的数,除了0本身,没有能比他更小的了。

一般来说,char本身就是byte
如果按数值输出就是0-255,如果按character输出,就是ascii

string的表示就复杂的多。还是因为编码。

同一句话,不同的人说有不同的意思。同一个字符串,不同的编法,就有不同的码。

字符串一般可以用char的集合来表示(如果char可以包括非ascii字符的话),或是byte数组表示。

例如每一个汉字,在某个字符集中的内码是xxxx,俺某种编码表示为2个byte,(高低位的问题需要约定),那么一个字符串就能确定的表示成一个byte数组。

喜欢哲学或是数学的朋友,可以认为都是映射反演。一切编程和其他的人类活动,都是RMI。

relation mapping inversion

通过将有用信息提取出来,映射成可以直接处理的形式,处理完毕后,再翻译成本来的语义。

也可以用语言来类比,256个byte值,就是笔画或是字母。

不同的组合方式,抽象出来一些基本概念,基本概念再组合和包装,就成了一些高级概念。


刚才我们说了一些基本数据类型,其实还有一个特殊的基本类型。

那就是数组,其实更合适的说法叫基本结构。

为什么数组会成为基础结构呢,那是因为存储方式决定的,存储中的数据是一块块的。一次其实取了一块。就更一般的说,取连续的可知的一系列数据片段显然是最快的。
回复

数据存储是数据库设计的重要课题,我们会慢慢的讲到二叉树,查找树,红黑树,B*树。

好了,今天我们就讲到基本的数据结构。基本数据结构是编程语言和算法的基石。通过基本的数据结构,我们可以构建更复杂更抽象的结构。
有兴趣的朋友,可以看看相关的语言中的实际数据类型。明白表示方法,就清楚了数据类型的基本知识。比如最大值,最小值,为什么float不精确等等,善于思考的同学也可以设计自己的数据类型,比如具有更高精读的float(例如.net中没有BigXXX类,.net选手可以去实现,估计几十行代码就能实现常用的运算法则)。

下课。

 

Smith:推荐一些资料看看


看书很有效,但是比较苦,推荐《算法导论》。

 

感谢同步信息的剑鱼同学的无私劳动。

14
1
分享到:
评论
4 楼 qbq 2009-11-19  
占位等待下一讲
3 楼 dandy 2009-11-16  
恩,不错,就是有点少,还没看尽兴!
2 楼 hedajia 2009-11-15  
期待楼主持续更新中
1 楼 libo_591 2009-11-13  
很好的知识,谢谢

相关推荐

    2024嵌入式大厂面经CVTE

    2024嵌入式大厂面经CVTE提取方式是百度网盘分享地址

    掺工业废钛石膏制备自密实混凝土研究

    虽然自密实混凝土作为目前建筑领域应用最广泛的材料,但是由于其性能等方面的局限性,导致了目前普通自密实混凝土难以满足不断提高的工程建设要求。研究发现, 通过在自密实混凝土中添加钛石膏等可以验证混凝土各方面性能的提高。且向自密实混凝土中添加工业废钛石膏,将其应用于建材领域,不仅可以解决目前市场上对自密实混凝土的运用问题,还能改善环境及固体废弃物综合利用的问题。因此开展对掺工业废钛石膏制备自密实混凝土的研究。 在本文中,我们对掺工业废钛石膏制备自密实混凝土静力学性能做了系统性试验,对于掺工业废钛石膏制备自密实混凝土中钛石膏质量份数,我们采用的是 85 份、90 份和 95 份。整个试验可分为两个部分:一、单轴压缩试验和巴西圆盘劈裂抗拉试验,通过这两个试验主要得出钛石膏自密实混凝土的抗压强度、弹性模量与劈裂抗拉强度;二、不同粉料配比对掺工业废钛石膏制备自密实混凝土的影响,通过对不同粉料制成的掺工业废钛石膏制备自密实混凝土的坍落扩展度和离析率影响试验。最后分析试验数据,从而得出本文结论。 本文通过对大量试验数据的总结与分析,结合国内外相关研究的已有结论, 总结出当工业废钛石膏质量份数增加到

    2024年家庭农场市场趋势分析.pptx

    行业报告

    DirectShow过滤器-AAC编码器

    本过滤器将PCM音频流编码为AAC音频流,由输出引脚输出。 参见介绍文章:https://blog.csdn.net/h3974/article/details/139550603?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22139550603%22%2C%22source%22%3A%22h3974%22%7D 过滤器名称:AAC编码器 过滤器GUID:{59FB3C29-4C37-47D9-AA73-1DFEDC0DDF71} 过滤器有1个输入引脚和1个输出引脚。 输入引脚 标识:In 媒体类型: 主要类型:MEDIATYPE_Audio 子类型:MEDIASUBTYPE_PCM 格式类型:FORMAT_WaveFormatEx 输出引脚 标识:Out 媒体类型: 主要类型:MEDIATYPE_Audio 子类型:MEDIASUBTYPE_MPEG_HEAAC 格式类型:FORMAT_WaveFormatEx

    电商平台用户行为分析与可视化数据集.zip

    电商平台用户行为分析与可视化数据集

    dbcslab13-afs2db2Advanced.docx

    基于SSM+Mysql的信息类课程教学知识管理系统(源码+开题报告+需求分析+演示视频).zip

    ssm信息类课程教学知识管理系统开发 采用 ssm框架技术,java语言,mysql数据库 前台+后台的模式开发 前台界面:W1 后台界面:CC 内容页面:P4 前台: 用户注册(手机号,用户名,姓名,登录用户名,密码,备注) 用户登录,找回密码,设置新密码 网站公告查看 课程查看(注册用户登录后,可以查看非公开课,用户不登录,可以查看公开课),点击查看课程详情,课程名称,授课专业,课程简介等,可以下载课程,以word或者PDF形式 知识卡片查看:点击课程后,可以查看该课程里的知识卡片,知识卡片分为文本,图片,视频3种类型的知识卡片。登录后可以收藏知识卡片 后台: 管理员 管理员管理 教师信息管理(姓名,学校,职级,绑定邮箱,电话,用户名,密码等) 注册用户审核 网站公告管理 课程信息管理(可以上传课程,word或者pdf形式) 知识卡片管理 系统管理 教师 个人资料修改 创建课程 创建知识卡片 注册用户 个人资料修改 我收藏的知识卡片

    疫情背景下应急物资配送算法:matlab实现用改进后的多目标粒子群优化(MOPSO)算法解决带有风险矩阵的多辆车配送旅行商问题

    疫情背景下应急物资配送算法:matlab实现用改进后的多目标粒子群优化(MOPSO)算法解决带有风险矩阵的多辆车配送旅行商问题,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 疫情背景下应急物资配送算法:matlab实现用改进后的多目标粒子群优化(MOPSO)算法解决带有风险矩阵的多辆车配送旅行商问题,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 项目简介: 1. 项目说明 2. 资源 2.1. 本文件夹的文件结构 2.2. “说明”文件夹的文件结构 2.3. 其他资源 3. 使用 3.1. 步骤 3.2. 出现乱码? 3.3. 在 MATLAB 2022a 下运行失败? 4. 算法 4.1. 问题情景 4.2. 算法思路 4.3. 流程图与依赖图 4.4. 时间复杂度 4.5. 算法优缺点 优点 缺点 4.6. 了解更多 5. 数据集

    三层交换机基本原理(华为内部资料,超详细).7z

    本文简要介绍了华为公司三层以太网交换机的二三层转发机制,主要 目的是帮助读者进一步了解华为交换机的基本原理及转发流程,以期有利 于更好的从事设备维护工作和建立于进一步学习的索引。 三层以太网交换机的转发机制主要分为两个部分:二层转发和三层交 换。 1. 二层转发流程 1.1. MAC地址介绍 MAC 地址是 48 bit 二进制的地址,如:00-e0-fc-00-00-06。 可以分为单播地址、多播地址和广播地址。 单播地址:第一字节最低位为 0,如:00-e0-fc-00-00-06 多播地址:第一字节最低位为 1,如:01-e0-fc-00-00-06 广播地址:48 位全 1,如:ff-ff-ff-ff-ff-ff 注意: 1)普通设备网卡或者路由器设备路由接口的 MAC 地址一定是单播的 MAC 地址才能保证其与其它设备的互通。 2) MAC 地址是一个以太网络设备在网络上运行的基础,也是链路层 功能实现的立足点。 1.2. 二层转发介绍 交换机二层的转发特性,符合 802.1D 网桥协议标准。 交换机的二层转发涉及到两个关键的线程:地址学习线程和报文转发 线程。 学习线程:

    华为OD机试C卷- 抢7游戏(Java & JS & Python & C).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    2024嵌入式大厂面经九州电子科技5.14面试

    2024嵌入式大厂面经九州电子科技5.14面试提取方式是百度网盘分享地址

    华为OD机试C卷- 查找一个有向网络的头节点和尾节点(Java & JS & Python & C).md-私信看全套OD代

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    毕业设计-基于java的数据结构可视化教学模拟软件

    毕业设计--基于java的数据结构可视化教学模拟软件 基于Java的数据结构可视化教学模拟软件是一个结合了编程技术和教育理念的项目。它可以帮助学生更好地理解数据结构的概念和实现,并通过可视化的方式展示数据结构的工作原理。以下是一个基于Java的数据结构可视化教学模拟软件的设计与实现建议: ### 1. 需求分析 - **用户角色**:确定系统的主要用户角色,如学生、教师等。 - **核心功能**: - 数据结构可视化:通过图形界面展示数据结构的工作原理和数据操作过程。 - 数据操作模拟:允许用户模拟数据结构的常见操作,如插入、删除、查找等。 - 算法演示:可视化展示基本算法,如排序、查找等。 - 交互式学习:提供交互式学习功能,如拖拽操作、即时反馈等。 - 测试与评估:提供测试题库,帮助学生巩固所学知识。 ### 2. 技术选型 - **开发语言**:Java。 - **图形界面**:Swing或JavaFX。 - **数据结构实现**:使用Java内置的数据结构类,如ArrayList、LinkedList、TreeSet等。 - **算法实现**:实现基本算法,

    redis基本命令的简单分享

    Redis 是一个高性能的键值对数据库,它支持多种类型的数据结构,如字符串、列表、集合、有序集合和哈希表。以下是 Redis 的简要介绍: ### 特点: - **内存中数据存储**:主要数据存储在内存中,读写速度快。 - **持久化**:支持数据的持久化到磁盘,保证数据不丢失。 - **支持多种数据结构**:可以存储和管理复杂的数据结构。 - **原子操作**:支持事务,确保操作的原子性。 - **丰富的特性**:包括发布/订阅、通知、键过期等。 ### 基本用途: - **缓存**:作为应用的缓存层,提高数据访问速度。 - **消息队列**:实现消息的发布和订阅。 - **会话存储**:存储用户会话信息。 - **排行榜系统**:实现实时排行榜。 ### 基本命令: - **GET/SET**:获取和设置键值。 - **LPUSH/RPUSH**:在列表两端添加元素。 - **SADD/SREM**:添加和删除集合中的元素。 - **ZADD/ZREM**:在有序集合中添加和删除元素。 - **HSET/HGET**:在哈希表中设置和获取字段。 Redis 是构建高性能应用

    泛微e-cology9 2303.01版exe安装包

    之前在某网站付费购买的安装包现分享给各位学习借鉴。

    华为OD机试C卷- 迷宫问题(Java & JS & Python).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    医院院内物资管理系统.zip

    创业、工作、毕业、课程需要人群,可以参考使用,支持有偿远程部署,联系我,保证一定能跑起来

    华为OD机试C卷- 字符串拼接(Java & JS & Python & C).md-私信看全套OD代码及解析

    私信博主免费看所有华为OD真题、考试报告、手撕代码、面试记录

    毕业设计-中国知网(cnki)爬虫及数据可视化,采用Django和Celery将爬虫内置在

    中国知网提供了大量的学术资源,包括论文、期刊、会议纪要等,我们可以通过其提供的搜索功能来获取相关的学术资料。 对于毕业设计,可以考虑以下几个方面: 1. **需求分析**:首先明确您的毕业设计需要爬取哪些数据,这些数据如何为您的项目增值。 2. **合法合规**:在您的项目中,确保所有的数据采集和处理都符合相关法律法规以及中国知网的用户协议。 3. **技术选型**:选择了Django和Celery,这是非常好的技术栈。Django是一个非常强大的Python Web框架,可以快速开发复杂的Web应用,而Celery则用于执行异步任务和定时任务,非常适合用于爬虫这类需要长时间运行的任务。 4. **数据可视化**:可以使用如matplotlib、seaborn、D3.js等工具进行数据可视化,展示您爬取到的数据。 5. **文档与报告**:毕业设计中,编写详尽的文档和报告也是非常重要的,这有

    基于Selenium的Java爬虫实战(内含谷歌浏览器Chrom和Chromedriver版本116.0.5804.0)

    资源包括: 1.Java爬虫实战代码 2.selenium学习笔记 3.代码演示视频 4.谷歌浏览器chrom116.0.5804.0 chrome-linux64.zip chrome-mac-arm64.zip chrome-mac-x64.zip chrome-win32.zip chrome-win64.zip 5.谷歌浏览器驱动器Chromedriver116.0.5804.0 chromedriver-linux64.zip chromedriver-mac-arm64.zip chromedriver-mac-x64.zip chromedriver-win32.zip chromedriver-win64.zip 特别说明:Chrome 为测试版(不会自动更新) 仅适用于自动测试。若要进行常规浏览,请使用可自动更新的标准版 Chrome。)

Global site tag (gtag.js) - Google Analytics