精华内容
下载资源
问答
  • 一门课程包含课程名(String)、课程编码(code)为六位字符,前三位字符为字母代表学科领域,后三位字符为数字,课程编码是唯一的。 再定义类TestSubject 来测试Subject类。特别地,需要维护一科目subject数组,...

    求大神帮忙写一个变成 带注释的 我实在是没整明白!!

    救救孩子吧 孩子可着急了!

    设计科目类Subject,其类的实例表示大学课程科目。一门课程包含课程名(String)、课程编码(code)为六位字符串,前三位字符为字母代表学科领域,后三位字符为数字,课程编码是唯一的。

    再定义类TestSubject 来测试Subject类。特别地,需要维护一科目subject数组,为了管理科目代码的唯一性,程序需要显示已经存储的科目代码信息,同时也要检测用户新提供的科目代码与现存科目代码是不同的。

    Subject类需要提供一下数据与方法:

    ① 科目名称及六位科目代码

    ② 构造函数,参数为科目名称及新的有效科目代码

    ③ get函数获得属性值

    ④ getDiscipline方法返回科目代码前三位的学科代码字符串

    ⑤ codeMatches方法返回布尔值,表示科目代码与提供的字符型参数匹配。这里“Matches”与String类中matches方法类似。

    ⑥ toString方法返回包含课程代码和课程名称的字符串。

    为帮助管理课程代码及他们的唯一性,Subject 类应提供的方法如下:

    ① allDisciplines方法:接受一个Subject对象的数组作为参数,返回一个包含不同3字符学科代码的数组,并以字母顺序排列。

    ② codesPerDiscipline方法:接受一个Subject对象的数组以及一个3字符学科代码作为参数,返回一个包含该特定学科的不同科目代码数组

    ③ isValidCode方法:接受一个字符串为参数,该字符串可能是一个新的科目代码,该方法返回一boolean值表示该字符串是否满足课程代码的结构要求。

    ④ codeExists方法:接受一个Subject对象的数组作为参数以及一个新的科目代码,返回一boolean值表示该科目代码是否已经在对象数组中存在。

    ⑤ sortDisciplines方法:接受一个Subject对象的数组作为参数,返回这些科目的字符顺序排列的数组

    展开全文
  • >对于唯一IDs或者其他可以代表字符或者数字的值,更希望是数字而不是字符。因为大数字能够被更少字节数存储比字符,它更快而且占用更少内存去转变和对比他们。 >如果你使用数字类型数据,在很多情况下...
    8.4.2 Optimizing MySQL Data Types 优化mysql数据类型
    8.4.2.1 Optimizing for Numeric Data 数字类型的优化
    >对于唯一IDs或者其他可以代表字符串或者数字的值,更希望是数字而不是字符串。因为大数字能够被更少的字节数存储比字符串,它更快而且占用更少的内存去转变和对比他们。
    >如果你使用数字类型的数据,在很多情况下从数据库中查询信息(使用活连接)都是很快的比访问文本文件。数据库中的信息更喜欢被存储在更紧凑的格式而不是文本文件,所以访问会涉及更少的磁盘查询。你能够节省编码在你的应用中因为你能避免分析文本去找到行和列的边界。
    8.4.2.2 Optimizing for Character and String Types 字符和字符串类型的优化
    对于字符和字符串类型的列,如下这些指导:
    >使用二进制排序顺序对快速比较和排序操作,当你不需要特定的语言排序规则特性,你能使用二进制操作来使用二进制排序在一个特别的查询中。
    >当通过不同的列比较值,声明这些列用相同的字符集且尽可能排序,从而避免字符转变在查询过程中。
    >对于列值大小小于8KB,使用二进制VARCHAR代替BLOB.GROUP BY和ORDER BY条件查询能够生成临时表,并且这些临时表能够使用内存存储引擎如果原始表不能获得任何BLOB类型。
    >如果一张表包含了字符串列例如名字和地址,但是许多查询都没有检索这些列,考虑切分字符串列到独立的表并且使用连接查询通过外键来完成查询如果有必要的话。当mysql查询任何值来自一行,它读取一个数据库包含了所有行中的列(和其他相邻的行)。保持每一行都很小,通过频繁的使用列,允许更多行存入每一个数据块中。这样压紧表能够减少磁盘I/O和查询使用的内存大小。
    >当你在InnoDB表中使用一个随机生成的值作为主键时,如果可能的话,将其加上升序的值,比方说当前日期和时间。当连续的主键值是物理上连续存储时,InnoDB 能够更快速的添加和查询数据。
    >具体看8.4.2.1优化数字类型的原因为什么一个数字列更有效比同样的字符串列。
    8.4.2.3 Optimizing for BLOB Types BLOB类型的优化
    >当用一个大blob来存储一个文本数据,首先考虑的是压缩它。当整个表都被InnoDB或者MyISAM压缩时不要使用这种技术。
    >对于表中的多个列,为了减少查询需要的内存不要使用BLOB列,考虑切分BLOB列到独立的表并且在需要时通过连接查询来引用。
    >虽然执行查询和展示一个BLOB值可能是非常空难从其他的数据类型中,你能够将BLOB数据类型的表放入不同的存储设备或者使用一个独立的数据库实例。例如检索一个BLOB也许需要一大块的序列磁盘读取它最好是选择传统的磁盘而不是一个SSD设备。
    >请看8.4.2.2的优化字符和字符串的理由为啥二进制字符串列在有些时候是更好的选择而不是一个等价的BLOB列。
    >不要对一个非常长的测试字符串进件相等性测试,你能够存储一个该列的哈希值在一个独立的列,索引该列,并且测试被哈希值的查询。(使用MD5()或者CRC32()函数来产生哈希值)因为哈希函数能够产生相同的结果对于不同的输入,你依然包含一个条件AND blob_column = long_string_value在查询中来保证的到正确的匹配。查询的性能会明显提升因为更小,更容易扫描的索引哈希值。
    8.4.2.4 Using PROCEDURE ANALYSE 使用程序分析。
    分析([max_elements[,max_memory]])
     注意:
        PROCEDURE ANALYSE()被声明在MYSQL5.7.18,且在mysql8.0中被移除
    ANALYSE()检查查询的结果并返回一个关于结果的分析建议优化每一列的数据类型,可能会帮助减少表的大小。为了得到这个分析,添加PROCEDURE ANALYSE在SELECT语句结束的地方:
    SELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])
    例如:SELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);
    结果展示了一些关于查询返回值的统计信息,并且建议一个优化数据类型对于列。这能够帮助检查你已经存在的表,或者之后导入的新数据。你也许需要尝试不同的参数设置以至PROCEDURE ANALYSE()不建议枚举数据类型当它不合适时。
    可选和可用的参数如下:
    >max_elements(默认256)是最大数量的不同值,ANALYSE()关心的每一个列。这个被用于ANALYSE()去检查是否最佳的数据类型应该是ENUM类型;如果有多于max_elements个不同值,则不枚举烈性不适合。
    >max_memory(默认8192)是最大数量的内存,ANALYSE()可以允许每一列占用的从而找出所有不同的值。
    一个PROCEDURE因素是不允许的在一个UNION查询中。
    到此关于MYSQL数据类型的优化就结束了。
    展开全文
  • 每间房内都藏有一定现金,影响你偷窃的唯一制约因素就是相邻房屋装有相互连通防盗系统,如果两间相邻房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额非负整数数组,计算你 不...

    LeetCode精讲(0198):计算数组中不相邻组合的最大和(Python)

    题目内容

    你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。

    给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。

    示例 1:

     输入:[1,2,3,1] 输出:4 解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。      偷窃到的最高金额 = 1 + 3 = 4 。

    示例 2:

     输入:[2,7,9,3,1] 输出:12 解释:偷窃 1 号房屋 (金额 = 2), 偷窃 3 号房屋 (金额 = 9),接着偷窃 5 号房屋 (金额 = 1)。      偷窃到的最高金额 = 2 + 9 + 1 = 12 。

    提示:

    • 0 <= nums.length <= 100
    • 0 <= nums[i] <= 400

    来源:力扣(LeetCode)

    链接:https://leetcode-cn.com/problems/house-robber

    著作权归领扣网络所有。

    解法效率

    b6a965fd928a5f83ef15c0bd1600b6d7.png

    LeetCode的Python执行用时随缘,只要时间复杂度没有明显差异,执行用时一般都在同一个量级,仅作参考意义。

    解法一(动态规划):

    【思路】 简单思考,得到如下思路:

    如果想取得最大值,那数组中每两个相邻的取值之间,只可能间隔1个数或2个数,开头有两种选择,从第一个数开始取和从第二个数开始取。

    所以如果在取得第i个数,此时其最大值只能来自:取得第i-2个数的最大值再加第i个数、取得第i-3个数的最大值再加第i个数。

    又有当i=0时,最大值为nums[0];当i=1时,最大值为nums[1];当i=2时,最大值为nums[0]+nums[2];当i>=3时,可使用上一段的方法计算。

    最终数列取得的最大值为取得nums[-1]和取得nums[-2]的两个最大值中更大的那一个。

    由此得出如下初步的逻辑(这要真能运行也会慢死):

     def rob(self, nums: List[int]) -> int:     def helper(i):         if i == 0:             return nums[0]         elif i == 1:             return nums[1]         elif i == 2:             return nums[0] + nums[2]         else:             return max(helper(i - 2), helper(i - 3)) + nums[i] ​     size = len(nums)     if size == 0:         return 0     elif size == 1:         return nums[0]     else:         return max(helper(size - 1), helper(size - 2))

    解法二(滚动数组):

    【思路】对以上算法进行优化,改用滚动数组的方法,将其空间复杂度优化为O(1),时间复杂度优化为O(n)。

     def rob(self, nums: List[int]) -> int:     size = len(nums)     if size == 0:         return 0     elif size == 1:         return nums[0]     elif size == 2:         return max(nums[0], nums[1])     else:         sum_1 = nums[0]  # 取得第i-3个数的最大值         sum_2 = nums[1]  # 取得第i-2个数的最大值         sum_3 = nums[0] + nums[2]  # 取得第i-1个数的最大值         for i in range(3, size):             n = nums[i]             sum_4 = max(sum_1 + n, sum_2 + n)  # 取得第i个数的最大值             sum_1 = sum_2             sum_2 = sum_3             sum_3 = sum_4         return max(sum_2, sum_3)

    解法三(更简单的思路):

    【思路】此时,我们还有一个更简单的思路:

    我们可以不再考虑取得某个数时的最大值,改为考虑截止到某个数的最大值。

    此时,如果我们取得的某两个数(第i个数和第i+3个数)之间间隔了2个数,那么说明截止到第i个数的最大值和截止到第i+1个数的最大值是相同的。

    因此,当我们改为考虑截止到某个数的最大值时,截止到第i个数的最大值只可能来自:截止到第i-2个数的最大值加第i个数、截止到第i-1个数的最大值。

    由此如下的逻辑:

     def rob(self, nums: List[int]) -> int:     size = len(nums)     if size == 0:         return 0     elif size == 1:         return nums[0]     else:         sum_1 = nums[0]         sum_2 = max(nums[0], nums[1])         for i in range(2, size):             sum_3 = max(sum_1 + nums[i], sum_2)             sum_1 = sum_2             sum_2 = sum_3         return max(sum_1, sum_2)
    展开全文
  • 生成固定长度不重复随机字符

    千次阅读 2018-02-11 13:29:38
    不过需求后来有修改过,原始需求略有不同,所以我回答与现在问题不太对得上,这里以原需求为基础重新提出这个问题,并且加上一些更有代表条件。 条件有以下几个: 长固定为8位,大小写字母加数字组合 ...

    问题

    问题来自V2EX:如何生成固定长度唯一随机字符串?

    不过需求后来有修改过,原始的需求略有不同,所以我的回答与现在的问题不太对得上,这里以原需求为基础重新提出这个问题,并且加上一些更有代表性的条件。

    条件有以下几个:

    • 串长固定为8位,大小写字母加数字组合
    • 串内容随机,不可被猜测,不可重复
    • 目标数据量不超过一千万
    • 不需要数据库

    分析

    其实重点在不需要数据库,否则直接用一个随机数生成器生成一千万个随机串放到数据库里直接用就好了。

    如果不依赖数据库的话,用任何随机数生成器,都不能保证绝对不重复——虽然概率非常低,比如8位大小写字母数字组合的空间超过14位十进制数,一千万不超过7位十进制数,即低于千万分之一——但理论上仍然可能发生。

    要保持唯一就需要自增ID,但是如果只是简单地用自增ID又会导致可能被猜测,虽然可以把组合逻辑搞得复杂一点,但数据量大了还是有一定的可能性被猜出——不要对自己想的简单逻辑有太高的自信是一个很重要的安全原则。

    实现

    基本如我在评论里说的那方法:

    • 8位大小写字母加数字转成二进制大概是47位多,一千万转成二进制不到27位
    • 所以可以用一千万以内的自增ID,加上20位二进制的随机数,组合成一个47位的二进制数
    • 因为上面的组合是可猜测的,所以需要进行一次加密,用一个自定义密码对这个数进行RC4加密
    • 最后用BASE62转换为大小写字母加数字的字符串

    恢复ID的方法:

    • 把字符串转成47位二进制数
    • 用RC4解密
    • 去掉随机数部分,转为整数即为原始ID

    关键点:

    • 随机数与ID的组合方式,这个与加密算法是相关的
    • 加密算法的选择,必须适合这样的需求,即消除可猜测性

    综合这两点,加密算法的选择范围就不大了,大部分常用的分组加密算法(一般都是128位分组,老一些的TEA也是64位,即使DES也需要56位)都肯定是没办法用的,只能用弱一些的短分组加密算法,比如以字节为单位进行加密的RC4。

    但是因为47位不是刚好整数字节,所以要分成40位和7位两组,其中40位由27位ID与13位随机数分散组合后进行RC4加密,再加7位随机数组成47位二进制数。

    代码

    初始化参数包括:

    • key: RC4加密密钥
    • chars: 目标字符串可用字符集合,不可重复
    • length: 目标字符串长度,目标字符串转为二进制不超过64位无符号整数,即: log(pow(len(chars), length)) / log(2) <= 64
    • bits_id: ID的二进制位数,不能超过目标串转为二进制位数除以8取整后乘以7的值,即: bits_id < int(log(pow(len(chars), length)) / log(2) / 8) * 7,之所以要如此,是为了保证加密的每个字节至少有一位随机数,确保RC4加密后仍然不可猜测
    • secure_level: 取值0-4,为每个字节中随机数的位数,越多越安全,0则不含随机数,超过4位则意义不大,仅作初始化时检查之用,如果目标串长度设置不符合这个要求会报异常

    主要功能函数是两个:

    • encrypt: ID转目标串
    • decrypt: 字符串转ID

    完整代码在GayHub

    之所以有兴趣研究这个东西,是因为这种需求其实还挺有用的。比如与微信或支付宝之类的支付平台对接时都需要一个唯一的订单号,但是通常客户又不希望把自己的内部订单ID曝露在外,所以都需要转换一下,当然这类应用都有数据库,只要生成一个随机串再查一下数据库有没有重复即可。还有像短链接应用也是可以用的(用七位字符就可以支持到41位二进制ID,secure_level=0)。

    然而毕竟还是要多查一次数据库,这种事情让CPU来干可能会更省资源一些。

    展开全文
  • 字符哈希

    2019-07-04 11:13:33
    字符hash是指将一个字符S映射为一个整数,使得该整数可以尽可能唯一代表字符S,那么在一定程度上,如果两个字符转换成整数相等,那么就可以认为这两个字符相同 在字符hash方法中,对只有大写字母...
  • 字符解压

    2020-06-07 10:29:31
    我们规定一种字符的压缩方法,用[]将重复的部分括起来,[]前面的数字代表重复的这部分重复了多少次,可以想到给定一个字符用这种方式压缩的结果会有多种,比如 aaaa可以压缩为4[a],也可以压缩为aa2[a],或者2[2...
  • 摘要:消息摘要就是将消息hash转换成一个固定长度的值唯一的字符,该过程是不可逆的 数字签名的特点:不可伪造,不可抵赖 数字证书:身份鉴别功能 CA机构:代表权威机构,保证数字证书的有效性 1.身份鉴别 2....
  • 字符

    2014-02-26 18:09:44
    每个数字代表唯一的至少在某种语言中使用的符号。 2.UTF-8是一种为Unicode设计的变长(variable-length)编码系统。即,不同的字符可使用不同数量的字节编码。对于ascii字符(A-Z, &c.)utf-8仅使用1个字节来编码。...
  • 字符哈希(Hash)

    千次阅读 2019-06-24 21:04:06
    所谓字符哈希就是构造一个数字使之唯一代表一个字符。 构造方法: 假如给你一个数字1166,形式上你只知道它只是1和6组合,但你知道它代表的实际大小1*10^3+1*10^2+6*10^1+6*10^0。 同理,给你一个字符,...
  • Python字符

    2019-04-07 22:24:03
    1.Unicode编码   实际上,从屏幕上的每一块文本都是以某种字符编码(character encoding)的方式保存的。相当于字符编码提供一种映射,使屏幕上显示的...每个数字代表唯一的至少在某种语言中使用的符号。(并不是所...
  • 得到ObjectId类似于这种ObjectId使用12字节存储空间,每个字节两位十六进制数字,是一个24位字符。其含义分别代表时间戳、机器码、PID、计数器。时间戳是文档创建时时间,只是从十进制转化成了十六进...
  • 分布式数字身份标识符DID是由字符组成的标识符,用来代表一个数字身份,不需要中央注册机构就可以实现全球唯一性。通常,一个实体可以拥有多个身份,每个身份被分配唯一的DID值,以及与之相关联的非对称密钥。不同...
  • 字符hash是指将一个字符s映射为一个,使得该整数可以尽可能唯一的代表也就是唯一标识。换言之,如果两个字符的hash值相同那么我们可以认为两者相同。 如果,我们对字母a~z进行一些的处理(如上图),但是aba的hash...
  • 搞懂 数字签名技术

    2021-01-22 10:25:06
    这个标记是只有信息发送者才能产生别人无法伪造一段数字串,是原信息报文数据加密转换生成,是对信息发送者发送信息真实性一个有效证明 虽然也可以采用整个信息都使用非对称秘钥加密方式,用发送方...
  • 什么是码点这就要提到unicode了,unicode是一个大集合,里面的规模可以容纳100多万个符号,每个符号...所以为每一个字符分配一个唯一的数字,这个数字就是码点。unicodeunicode是分区定义。每个区可以存放 65536 个...
  • 当我们在开发的时候,我们会遇到这些业务场景:如给用户信息一个随机的字符作为一个唯一的认证方式、给商家一个特定的标识、给某些商品一个代表、存为一个session标识作为缓存、给redis一个键值对等等。...
  • git出现文件夹后面跟@+数字

    千次阅读 2020-08-18 20:26:49
    文件push时会压缩,然后上传同时生成一检验字符,at后面的数字就是检验字符的前面部分。 二、原因 文件夹内还有.git,导致这些文件夹push后变成了子模块 三、解决思路 删除原来的子文件夹的.git 删除本地git...
  • 题意: 给你n个数字代表此时钢琴按键。问最长重复节拍。 就转化为n-1个值得不可重叠最长重复子。题目要求节拍对应的串>=5 意思就是这个最长重复节拍应>=4。 思路: 二分答案这个子串最长为mid(下面...
  • 在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定日期。 牛牛习惯用88位数字表示一个日期,其中,前44位代表年份,接下来22位代表月 份,最后22位代表日期。显然:一个日期只有一种表示方法,而两个...
  • 根据国密标准《GM/T 0015基于SM2密码算法的数字证书格式规范》规定了我国国密数字证书的格式规范。 对比国际标准,国内的标准定义了新算法sm2、sm3、sm4,也定义新的对象标识符OID。 本文要介绍主题项的含义,对象...
  • n(-84~127) 可以存储正数、负数、零、定点数和精度为38位浮点数,其中,M表示精度,代表数字的总位数;N表示小数点右边数字的位数 日期类型 date 7字节 用于存储表中日期和时间数据,取值范围是公元前4712年1月...
  • 同时,js定义了2个特殊原始值:null(空)和undefined(未定义),分别代表了各自特殊类型的唯一成员。 数字: js不区分整数值和浮点数值,js中所有数值均用浮点数值表示。 js采用IEEE 754标准定义64位浮点格式...
  • cookie成分

    千次阅读 2009-06-26 15:25:00
    name: 每个cookie由一个唯一的名称代表,这个名称可以包含字母、数字、下划线。cookie的名称是不分大小写,所以mycookie和MyCookie是一样。但考虑到服务器端语言可能区分大小写,建议定义和使用时还是区分大小写。...
  • 它们通常分别代表了各自特殊类型的唯一成员。JavaScript中除了数字、字符、布尔值、null和undefined之外就是对象了。 JavaScript中值类型和引用类型区别 JavaScript中值类型值是不可变: 任何方法都无法...
  • wx:key使用及wx:key

    万次阅读 2018-05-16 09:02:39
    这个”字符代表在 for 循环的 array 中 item 的某个“属性”该“属性” 的值需要是列表中唯一的字符数字,且不能动态改变。用于被遍历的组件需要多个属性的时候。 //test.js data: { input_data: [ { id: 1,...
  • 近期做一些项目时候发现,自己js基础还是不够...它们通常分别代表各自特殊类型的唯一成员。 三、js中除了数字、字符、布尔值、null和undefined之外就是对象了,对象(object)是属性集合,每个属性都由“名/
  • Shell中变量

    2019-09-09 20:44:25
    内存会被划分为很多小的区域,每个区域拥有唯一的串数字代表它,这串数字叫做内存地址。我们可以给每个内存地址一个独一无二的名字,这就是变量。变量可以用来存放不同的值,但是一次只能存一个值。 在Linux...
  • 表格是唯一的数据结构中Lua可以帮助我们创造出不同的类型,如数组和字典。 Lua使用关联数组和可不仅数字,但也有不同的零字符索引。表格都没有固定的大小,并根据需要可以增长。 Lua采用的所有陈述,包括包装的...
  • 它们通常分别代表了各自特殊类型的唯一的成员,也就说是它自有类型的唯一的一个成员。从技术上讲,只有Javascript对象才能拥有方法,数字、字符和布尔值都可以拥有自己的方法,但是null和undefined却无法拥有方法...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 208
精华内容 83
关键字:

代表唯一的数字串