算法与追mm:算法导论之SSM PKU版

动态规划

  你追一个MM的时候,需要对该MM身边的各闺中密友都好,这样你追MM这个问题就分解为对其MM朋友的问题,只有把这些问题都解决了,最终你才能追到MM。

  该方法适用于聪明的MM,懂得“看一个人,不是看他如何对你,而是看他如何对他人。”的道理,并且对付这样的MM总能得到最优解。

  该方法的缺点是开销较大,因为每个子问题都要好好对待。。。。
------------------------------------------------------------

贪心法

  你追一个MM的时候,从相识到相知,每次都采用最aggressive的方式,进攻进攻再进攻!从不采用迂回战术或是欲擒故纵之法!目标是以最快的速度确立两人关系。

  该法优点是代价小,速度快,但缺点是不是每次都能得到最优解。。。。。

------------------------------------------------------------

回溯算法

  追一个MM,但也许你还是情窦初开的新手,不知道如何才能讨得MM的欢心,于是你只好一条路一条路的试,MM不开心了,你就回溯回去换另一种方式。当然其间你也许会从某些途径得到一些经验,能够判断哪些路径不好,会剪枝(这就是分支估界了)。你也可以随机选择一些路径来实施,说不定能立杆见影(这就是回溯的优化了)但总的来说,你都需要一场持久战。。。。

  该算法一般也能得到最优解,因为大多数MM会感动滴!!但其缺点是开销大!除非你是非要谈一场恋爱不可,否则不推荐使用。特别是你可能还有许多其他的事情要做,比如学习,比如事业。。。。

------------------------------------------------------------

老赵提问:假如一个mm对应NP完全问题,老大给个有效解法

俺回答:呵呵,那你为什么那么贱,非要去追呢?记住:“天涯何处无芳草!” 不过如果你“非如此不可”的话,建议升级你的硬件,好好学习,好好工作,加强实力,人到中年的时候也许你能解开NP难。。。。

Ranger补充:这种MM可遇而不可求了,也就是eshow的终极目标。eshow其实已经开发出了解决NP完全问题的对数级算法,但是不愿意告诉偶们……



在认真研读思考之后,周MM举一反三,对深度优先和广度优先也做了总结:

深度优先就是追一个mm追到底,直到失败然后换个mm继续追……

广度优先就是同时追多个mm,一起发展……



大家都开始集思广益……

老马:二叉树的前序、中序和后序周游:
前序就是直接搞定MM,然后搞定她爸妈(左)和你自己爸妈(右)
中序就是先搞定未来岳父岳父,然后搞定她,最后告诉你爸妈
后续就是,让未来的岳父岳母和自己爸妈都觉得你们合适之后,才对MM下手,这个时候就没有障碍了啊

****************************************************

  网络流:

  追MM的时候总避免不了送礼物,但是你老是直接送礼物就会给MM造成很大的压力,于是你就想到了通过朋友来转送的方法。你希望送给MM尽可能多的礼物,所以就是需要找到一中配送方案,就是最大流了。然而你请别人帮忙并不是不要开销的,你让A同学拿去给B同学可能需要一些花费,自然你不是一个大款,想最小化
这个花费,那么就是最小费用最大流了……

****************************************************

  在你追了若干美女都失败告终后,你发现有一批美女追起来是一样困难的,如果你能追到其中任何一个就能追到其他所有的美女,你把这样的女人叫作NP- Complete。P=NP:这是一个美好的猜想,追美女和恐龙的难度其实一样。APX与Random:NP的美女难追,你无法完全占有她。你只好随机的去靠近她,装作若无其事;或者用一种策略,追到她的一个approximation ratio,例如50%。APX-hard:这样的女人,连一个固定的百分比都不给你,还是另谋高就吧。

****************************************************

  匹配:从初中到高中到大学大家追来追去,就是个二分图匹配的过程...."和谐社会"应该就一个最大匹配...
可是后来有某些MM同时跟>1个人发展,违背了匹配的基本原则...大家都很BS之...然后最近断背山很火,人们惊奇得发现原来还可以是 任意图匹配...

  STL:某位贝尔实验室的大牛在追了N个MM后,为了造福后来人,总结了自己的经验,
出了本《 追MM求爱秘笈大全》,英文名叫Standard courTing Library,缩写为STL,广大同学在使用STL后,惊喜地发现追MM变得异常方便,大大缩短了时间和精力...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SSM2国密算法是一种国家密码算法,也被称为SM2(无线局域网密码算法)和MIL-STD-1756A算法。它是由国家密码管理局提出的一种非对称加密算法。下面介绍一下SSM2国密算法在不同JDK本中的对应情况。 在JDK本8之前,SSM2国密算法并没有被原生支持。但是,可以通过使用第三方的Bouncy Castle等库来实现SSM2国密算法。你需要下载相应本的Bouncy Castle库,然后通过配置文件来使用该库提供的SSM2国密算法功能。 在JDK本9及以上,Java原生库开始原生支持SSM2国密算法。你可以直接使用Java原生库来实现SSM2国密算法。可以使用如下代码来生成SSM2密钥对: ```java import java.security.KeyPair; import java.security.KeyPairGenerator; import java.security.NoSuchAlgorithmException; import java.security.Security; import org.bouncycastle.jce.provider.BouncyCastleProvider; public class SSM2Example { public static void main(String[] args) throws NoSuchAlgorithmException { Security.addProvider(new BouncyCastleProvider()); KeyPairGenerator generator = KeyPairGenerator.getInstance("SM2", "BC"); generator.initialize(256); // 设置密钥长度 KeyPair keyPair = generator.generateKeyPair(); System.out.println("PrivateKey: " + keyPair.getPrivate()); System.out.println("PublicKey: " + keyPair.getPublic()); } } ``` 上述代码在JDK本9及以上中可以直接运行并输出SSM2密钥对。注意该代码中的算法名为"SM2",使用了Bouncy Castle作为提供者。 总结来说,SSM2国密算法在不同JDK本中的对应情况为:在JDK本8及以下需要使用第三方库(如Bouncy Castle)来实现;在JDK本9及以上,可以直接使用Java原生库实现。 ### 回答2: ssm2国密算法是一种对称加密算法,也是中国国家密码管理办公室颁布的SM2密码算法的一个实现。SM2密码算法是基于椭圆曲线加密的一种算法,具有高度的安全性和效率。 SSM2国密算法在Java开发中可以与各个本的JDK一起使用。但需要注意的是,首先要确保JDK支持椭圆曲线算法(ECC),因为SM2密码算法基于椭圆曲线加密。自JDK 7u71和JDK 8u31以后的本中,JDK开始支持ECC算法。 具体来说,对应不同JDK本使用SSM2国密算法的步骤如下: 1. 在项目的依赖管理中引入相关的国密算法库,如Bouncycastle(BC)。 2. 在代码中导入相关的包和类,如org.bouncycastle.crypto.CipherParameters、org.bouncycastle.crypto.params.ECPrivateKeyParameters、org.bouncycastle.crypto.params.ECPublicKeyParameters等。 3. 使用具体本的JDK提供的API来生成SM2参数,如生成SM2密钥对等。 4. 使用SSM2算法进行加密、解密、签名、验签等操作,可以通过调用相应的方法实现。 需要注意的是,由于SSM2国密算法是中国特有的算法,不被国际通用密码标准所接受,因此在使用过程中需要特别注意相关法律和政策的约束。另外,为了确保安全性,建议使用最新本的JDK和国密算法库,并及时更新补丁。 总之,SSM2国密算法可以与不同本的JDK一起使用,只需根据相应的JDK本选择合适的库和API进行集成和开发。 ### 回答3: ssm2国密算法是中国自主研发的一种密码算法集合,由国家密码管理局发布。它是对原有的sm2国密算法进行了改进和优化,提供了更高的安全性和可靠性。 ssm2国密算法主要用于数字签名、密钥交换和公钥加密等密码应用场景。其中,数字签名算法可以用于确保数据的完整性和身份认证,密钥交换算法可以用于确保通信双方的密钥安全,公钥加密算法可以用于确保通信内容的机密性。 对于ssm2国密算法的jdk本支持,目前常用的JDK本都具备了对于国密算法的支持。例如,jdk 1.7及以上本都可以通过引入相关的国密算法库来实现对ssm2国密算法的调用和使用。 在使用ssm2国密算法时,我们可以采用以下步骤来搭建国密环境和调用算法: 1. 首先,需要从官方渠道下载相应的国密算法实现库,如GM-Tools或者BCTLS。 2. 将下载好的库文件导入项目的classpath中,确保可以正常访问。 3. 在代码中引入相关的国密算法工具类,比如SM2Util或者SM2Cipher。 4. 根据具体的功能需求,调用相应的国密算法方法,比如生成密钥对、进行数字签名或者解密操作等。 需要注意的是,由于国密算法涉及到一些加密和解密的敏感操作,建议在正式使用前咨询相关的法律和安全专业人士,确保符合国家相关法律法规的要求,并确保密钥和算法的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值