时间: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:推荐一些资料看看
看书很有效,但是比较苦,推荐《算法导论》。
感谢同步信息的剑鱼同学的无私劳动。
分享到:
相关推荐
Java路线的第一步:简单了解计算机网络
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。
模型约化-DEIM方法-python版代码
基于ERP与建筑信息模型(BIM)大数据应用系统集成方案(精品).pptx
大模型.pdf
ZAP_2.16.0_aarch64.dmg 、ZAP_2.16.0.dmg
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。
内容概要: 该文件为Java最新LTS版本JDK 21版本的exe安装包,安装后无需配置环境变量 适用人群: 使用使用Java环境运行服务和开发的人群 使用建议: 使用可参考官网亦可参考本博主所撰Java相关文章
什么是HTML文件? HTML的英文全称是Hypertext Marked Language,中文叫做“超文本标记语言"。和一般文本的不同的是,一个HTML文件不仅包含文本内容,还包含一些Tag,中文称“标记"。 一个HTML文件的后缀名是.htm 或者是.html.用文本编辑器就可以编写HTML文件。
使用DeepSeek写的泡泡龙小游戏,可以直接用手机浏览器打开进行游戏操作。
The Best Cross Platform Online JudgeOnline Judge KernelVirtual Judge AdapterContest Collect, Command-Line InterfaceTelnet Server/ClinetFTP Server/Client
510crm客户关系管理系统,包有一种角色:管理员、主要功能如下。 1. 营销管理:管理员可以管理营销活动,包括创建、编辑和删除营销机会。 2. 客户开发计划:管理员可以制定客户开发计划,包括拜访计划、电话联系计划等。 3. 客户管理:管理员可以管理客户信息,包括添加、编辑和删除客户信息。 4. 客户信息管理:管理员可以查看和编辑客户的详细信息,包括联系人、联系方式等。 5. 客户流失管理:管理员可以跟踪和处理客户流失情况,包括分析流失原因、制定挽回计划等。 6. 服务管理:管理员可以管理客户服务,包括创建、分配、处理和归档服务请求。 7. 统计报表:管理员可以生成各种统计报表,包括客户贡献分析、客户构成分析和客户流失分析等。 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Jquery、Layui、ECharts、 后端技术:Spring、SpringMVC、MyBatis 三、运行环境 操作系统:Windows或者macOS JDK版本:最好是JDK1.8,其他版本理论上也可以 开发工具:IDEA、Ecplise、Myecplise
1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。
大模型综述,大模型入门书籍,推荐下载观看
基恩士XG-X系列定位手册
python贝叶斯过滤垃圾短信模型系统+模型+运行说明.zip 【快速开始】 测试的短信内容(可到test.py中修改) 执行测试脚本 python3 test.py 结果输出 垃圾短信测试:(0表示正常短信,1表示垃圾短信) ['0' '1' '0' '0' '0' '0' '1']
在Windows Server Update Service控制台查看更新报告的必须环境
c# wpfwnmp PHPissues
内容概要:该篇文章介绍了如何设计和实现一个基于Spring Boot框架的校园二手书交易平台作为大学本科阶段重要的毕业设计项目。文中阐述了平台建设背景及其必要性,详述所选取的主要技术支持手段,包括前后端分离技术Vue.js用于前端界面构建和Spring Boot 2.7组合MyBatis-Plus服务于后台业务逻辑处理,MySQL负责数据存储而Redis提供高效缓存机制,还有借助于消息队列服务来保证良好的交互体验等,以及展示了几段关键功能如用户登录注册认证、搜索功能实现与订单流程设计的具体代码样例并解析其中蕴含的编程思路,最后提出了对于整个系统在安全性和性能两方面的优化措施。同时强调该系统可以为校园内部创造更加便捷有序的商品交换空间,帮助学生们提高书籍利用率。 适用人群:计算机科学专业即将进入实习阶段的大专院校在校生或者有兴趣了解Web应用完整创建过程并对分布式系统感兴趣的学习者。 使用场景及目标:为有意向参与此类课题的学生提供一个真实的案例参考;指导他们学会怎样运用现代软件工程的方法论来进行详细的需求调查,掌握常用web开发语言的应用技巧进而加深理论认知;鼓励大家模仿练习,自己动手操
AIapiDeepSeekOpenAIClaude3(ChatGLM)OllamaLangchain(Coze)DifyGitee AIapi