`
kimmking
  • 浏览: 546678 次
  • 性别: 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  
很好的知识,谢谢

相关推荐

    算法分析与设计:面向计算机科学专业学生的算法讲座

    Part 1:基本算法30H讲座01-讲座02-讲座03- 讲座04- 讲座05- 讲座06-Part 2:图算法和动态编程30H讲座07-讲座08-讲座09-第10课-讲座11-第12 -讲座13- 讲座14-教科书算法导论,托马斯·科门(Thomas H.Cormen) 带注释...

    UML 讲座PART2

    **UML讲座PART2** UML(统一建模语言)是一种在软件开发过程中广泛使用的图形化表示工具,它为系统分析、设计和实现提供了一种标准化的语言。在UML讲座PART2中,我们将会深入探讨UML的核心概念、扩展功能以及在实际...

    搜索算法讲座资料~~~~~

    An Introduction to Recursion, Part 1.mht An Introduction to Recursion, Part 2.mht BFS - 参考框架.txt DFS - 参考框架.txt ID - 参考框架.txt n皇后问题位运算版.mht Search in a Graph.mht STL in Searching....

    The standard template library.zh-cn(Part1-4)_it_squareh4l_C++_

    在Part1-4的讲座中,squareh4l可能详细讲解了这些基本概念,并通过实例展示了如何使用STL进行高效的编程。他可能会讨论容器的性能特性、迭代器的使用方法、常见算法的应用场景以及自定义函数对象的编写。此外,他还...

    模式识别和人工智能专业知识讲座.ppt

    Part 1:引论 * 模式识别概述 * 人工智能概述 * 概率基础知识回顾 * 特征矢量和特征空间 * 随机矢量的描述 Part 2:特征提取和选择 * 特征提取的基本概念 * 特征选择的方法 * Dimentionality reduction Part 3:...

    中科大 陈国良 并行计算 讲座

    他的讲座内容通常涵盖并行计算的基础理论、编程模型、算法设计以及实际应用等方面。 首先,我们从“PC6--具体的算法设计方法.ppt”来看,这部分可能会深入探讨如何设计并行算法。并行算法设计的关键在于如何将任务...

    程序员考试刷题-Design-Of-Algorithms-Part-1-:算法设计-第1部分-

    这些讲座最后描述了我们将如何在本课程中分析算法的几个指导原则。 ASYMPTOTIC ANALYSIS:本周的第二组讲座是对 big-oh 符号及其亲属的介绍,它属于每个严肃的程序员和计算机科学家的词汇表。 目标是确定用于算法...

    具体数学(part 1)_赵启阳.ppt

    赵启阳教授的《具体数学(part 1)_赵启阳.ppt》是针对这一主题的讲座材料,主要讨论了渐进分析(Asymptotics)的概念及其在处理数学问题中的重要性。 渐进分析源自古希腊数学,它关注的是函数或序列随着变量趋于无穷...

    互联网搜索课程part2-MSRA

    《互联网搜索课程part2-MSRA》是微软亚洲研究院在清华大学开设的一门深入探讨互联网搜索与挖掘技术的课程。这门课程的第二部分涵盖了多个重要讲座,旨在为学生提供全面而深入的搜索引擎技术和网络数据挖掘知识。以下...

    上海交通大学程序语言与设计PYTHON课件 PART2

    【标题】"上海交通大学程序语言与设计PYTHON课件 PART2" 涵盖了Python编程中的核心概念,这部分课程深入探讨了Python语言的关键元素,包括函数的使用、条件语句、循环结构、类的定义以及模拟设计。这些知识点是...

    具体数学(part 2)_赵启阳.ppt

    赵启阳教授的讲座“具体数学(part 2)”涵盖了两个重要的渐进分析技巧:自助法(Bootstrapping)和尾部替换(Tail Substitution)。这些技巧在处理复杂的数学问题和优化算法效率时具有重要的价值。 **自助法**是一种...

    收集IT的前言讲座Linux

    1. "Slides-Part1.pdf"、"Slides-Part2.pdf"、"Slides-Part3.pdf":这些可能是讲座的幻灯片,可能涵盖了Linux、PHP等主题的详细讲解。 2. "Effective_Vim.ppt":Vim是一个强大的文本编辑器,这个文件可能教你如何更...

    MSc-Part-1-Sem-1

    【标题】"MSc-Part-1-Sem-1" 暗示这是一门针对硕士研究生阶段第一部分第一学期的课程资料,可能涵盖了某个专业领域的基础或核心课程。在这个压缩包中,我们重点关注与“Jupyter Notebook”相关的学习内容。 【描述...

    accp5.0转接课程第一节

    【标签】"accp-ppt5[1].0.part2"暗示了这门课程可能使用了PowerPoint演示文稿作为教学辅助工具,"part2"可能表示这是系列讲座的第二部分,意味着在前面的部分中可能已经涵盖了accp5.0的基础知识,而这一部分则可能...

    自己动手写操作系统(含源代码).part1

    其中每一章都以前一章的工作成果为基础,实现一项新的功能。而在章的内部,一项大的功能被分解成许多小的步骤,通过完成每个小的步骤,读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣。 本书...

    Clean Architecture - Patterns, Practices, and Principles.part4

    这个压缩包包含了一系列的讲座幻灯片,从M1到M8,以及一个名为"clean-architecture-demo-master"的项目演示,这些内容为我们揭示了Clean Architecture的核心概念、模式、实践和原则。 Clean Architecture是一种设计...

    Andrew Ng's Machine Learning I

    2. Octave/MATLAB使用: 文档建议学生观看视频讲座、完成相关主题的复习问题,并使用Octave或MATLAB编程。Octave和MATLAB都是数值计算环境,广泛应用于教学和工业界。它们具有强大的矩阵处理能力和易用的脚本语言,...

    Programming Exercise(机器学习2014练习)

    在开始这个编程练习之前,我们强烈建议您观看与相关主题相关的视频讲座并完成复习问题。 为了开始这个练习,您需要下载起始代码,并将其内容解压到您希望完成练习的目录。如果需要,可以使用 Octave 中的 `cd` 命令...

    自己动手写操作系统(含源代码).part2

    其中每一章都以前一章的工作成果为基础,实现一项新的功能。而在章的内部,一项大的功能被分解成许多小的步骤,通过完成每个小的步骤,读者可以不断获得阶段性的成果,从而让整个开发过程变得轻松并且有趣。 本书...

    H264学习指南介绍

    1. **H.264/MPEG-4 Part 10 White Paper**:该白皮书提供了H.264编码标准的概述。 2. **Videocoding using the H.264/MPEG-4 AVC compression standard** (Halsted Press):这本书详细介绍了H.264标准的技术细节。 3...

Global site tag (gtag.js) - Google Analytics