草庐IT

c#数据结构与算法(1)预备知识

yuegou 2023-03-28 原文

该文档主要是本人的学习笔记,用于备忘,若有侵权,可随时联系删除!
参考学习网址:

一、数学基础
等比数列,等差数列等很基础,公式一搜遍地都是,不再赘述

阶乘c#实现:

点击查看代码
static void Main(string[] args)
        {
            Console.WriteLine("请输入需要阶乘的数:");
            string a=Console.ReadLine();
            Console.WriteLine("阶乘结果为:"+Fact(int.Parse(a)));
            Console.ReadKey();
        }
        public static int Fact(int n)
        {
            if(n<=1)
            {
                return 1;
            }
            else
            {
                return n * Fact(n - 1);
            }
        }

二、数据结构发展历史
1、无结构阶段:程序处理的是纯粹的数值,数据关系主要为数学公式或数学模型
2、结构化阶段:用于非数值处理领域,数据表示成为数据设计的重要问题
3、面向对象:减少重复设计的部分,大量的封装类出现,减少了程序设计者的负担

三、算法
计算1-100的和(循环加一遍or用等差数列求和?),方法不同效率不同

1、算法特性
1)输入输出:算法具有零个或者多个输入,具有至少一个的输出。
2)确定性:相同的输入智能得到相同的输出
3)有穷性:在有限的步骤结束
4)可行性

2、设计要求
1)正确性:满足余弦指定的功能与性能的需求
A、无语法错误 B、对于几组输入能够得到满足需求的结果
C、对于非法输入抛出异常 D、严苛数据依旧能产生满足需求的结果
2)健壮性:输入数据不合法,能作出相关处理
3)可读性
4)耗时低、占用空间少

四、数据结构基础
1、基本概念和术语
1)数据:计算机识别、存储和加工处理的信息符号(整形、浮点型、声音、视频、图像)
2)数据元素:基本单位,一个数据元素由若干个数据项组成
3)数据项:描述数据的最小单位
4)数据对象是性质相同的一类数据元素的集合,是数据的一个子集
5)数据结构:数据和关系的集合

五、四大逻辑结构
1、集合结构:除同属一个集合外,并无其他关系

2、线性结构:数据元素之间存在一对一关系

3、树形结构:一对多

4、图形结构:多对多

六、数据类型
1)数据类型:取值范围和对数进行操作的总和
2)抽象数据类型:数学模型及模型上的操作,与操作分离,从而实现封装

七、复杂度
1、时空复杂度定义
1)时间复杂度:运行所需时间
时间频度T(n)=O(f(n)),O(f(n))为时间复杂度
2)空间复杂度:所需内存大小
固定部分:代码空间、数据空间等(静态)
可变空间:动态分配空间(递归栈所需空间),与算法有关
2、度量时间复杂度
1)事后统计法:统计比较算法运行时间(测试较为困难)
2)事先估计法:O表示最坏情况、Ω表示最好情况,θ表示平均情况(一般用O)

八、时间复杂度的度量方法
O(n)函数中间的值为程序执行的步骤次数
主要观察程序中的循环结构,每一个循环结构代表执行循环中的指令n次
1、O(1)  /  O(C)  C代表常数
2、O(n)
3、O(n^2)
4、O(logn)

点击查看代码
int i=1,n=10000;    //执行一次
    while(i<=n){    //执行logn次
        i*=2;
    }
    return 0;       //执行一次
5、O(n^1/2)
点击查看代码
while(x >= (y+1)*(y+1))
{
   y=y+1; ①
}

大小关系:O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)

有关c#数据结构与算法(1)预备知识的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby - 解析 RDFa、微数据等的最佳方式是什么,使用统一的模式/词汇(例如 schema.org)存储和显示信息 - 2

    我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i

  3. ruby - Ruby 有 `Pair` 数据类型吗? - 2

    有时我需要处理键/值数据。我不喜欢使用数组,因为它们在大小上没有限制(很容易不小心添加超过2个项目,而且您最终需要稍后验证大小)。此外,0和1的索引变成了魔数(MagicNumber),并且在传达含义方面做得很差(“当我说0时,我的意思是head...”)。散列也不合适,因为可能会不小心添加额外的条目。我写了下面的类来解决这个问题:classPairattr_accessor:head,:taildefinitialize(h,t)@head,@tail=h,tendend它工作得很好并且解决了问题,但我很想知道:Ruby标准库是否已经带有这样一个类? 最佳

  4. c# - 如何在 ruby​​ 中调用 C# dll? - 2

    如何在ruby​​中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL

  5. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  6. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  7. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  8. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  9. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  10. FOHEART H1数据手套驱动Optitrack光学动捕双手运动(Unity3D) - 2

    本教程将在Unity3D中混合Optitrack与数据手套的数据流,在人体运动的基础上,添加双手手指部分的运动。双手手背的角度仍由Optitrack提供,数据手套提供双手手指的角度。 01  客户端软件分别安装MotiveBody与MotionVenus并校准人体与数据手套。MotiveBodyMotionVenus数据手套使用、校准流程参照:https://gitee.com/foheart_1/foheart-h1-data-summary.git02  数据转发打开MotiveBody软件的Streaming,开始向Unity3D广播数据;MotionVenus中设置->选项选择Unit

随机推荐