离散所导出来的大整数存储和运算问题

python可以自动解决这个问题,但到了c++下要存128以上就要gmp mp boost 这种库,实现逻辑也很简单,速度会比python快很多。

这里放一个java版一个大数乘法的案例

public static Integer[] bigNumberMultiply(int[] arr1, int[] arr2){
   ArrayList result = new ArrayList<>();  //中间求和的结果 
   //arr2 逐位与arr1相乘
   for(int i = arr2.length - 1; i >= 0; i--){
     int carry = 0;
     ArrayList singleList = new ArrayList<>(); //arr2 逐位单次乘法的结果
     for(int j = arr1.length - 1; j >= 0; j--){
        int r = arr2[i] * arr1[j] + carry;
        int digit = r % 10;
        carry = r / 10;singleList.add(digit);
     } 
     if(carry != 0){
         singleList.add(carry); 
     } 
     int resultCarry = 0, count = 0; 
     int k = 0; 
     int l = 0; 
     int offset = arr2.length - 1 - i;       //加法的偏移位      
     ArrayList<Integer> middleResult = new ArrayList<>(); //arr2每位乘法的结果与上一轮的求和结果相加,从右向左做加法并进位 
     while (k < singleList.size() || l < result.size()) {
         int kv = 0, lv = 0;     
         if (k < singleList.size() && count >= offset) {
            kv = singleList.get(k++);     
         }
         if (l < result.size()) {
            lv = result.get(l++);     
         }     
         int sum = resultCarry + kv + lv;
         middleResult.add(sum % 10);     //相加结果从右向左(高位到低位)暂时存储,最后需要逆向输出     
         resultCarry = sum / 10;
         count++; 
     }
     if(resultCarry != 0){
         middleResult.add(resultCarry); 
     } 
     result.clear(); 
     result = middleResult;
  } 
  Collections.reverse(result);    //逆向输出结果
  return result.toArray(new Integer[result.size()]);
}

快速幂算法其实也用到了其中的想法。只是存储在数组,分区块乘法,再数组存储,这是高精度的方法。而快速幂是分开运算由数学公式保证正确性。

快速幂的复杂度是O(logn)大数存储和乘法是O(n^2)

可是这点数字在ipadpro 下来运行还是秒出的。

去CPChain参观

4.25阴雨霏霏,本不知何去何从,在经济学导论课上叱咤风云,可我们却去了一家公司上了一节商业课,怎么说,到一个地方就愈发觉得自己的无知和需要广泛学习成为T字形人才。

接我们的是CPChain的cto,他是一个很全的人。不是一个技术,但是一个懂技术有见识的人,做出过大学老师,干过经济,玩过各种各样的行业。受不了经济圈的浮躁,转而进军币圈。和他在一起愈发觉得济源的重要性。我们聊及我们的项目,Vchain的前景,也许我们只是设想,但世界上已经有一个组织在干这个项目,建立在(半)自动驾驶下的区块链技术,也就是后来我们深入聊到的MOBI。他们已经到了确立标准的阶段了。我们聊及商业化的可能性,怎么说上链的成本CPChain在着重解决,他们有自己的底层,旨在用技术来加快速度(私有链可以加速到1s)、降低成本,他们在和BMW等一系列公司谈合作。我们之窥探综述部分,但已经深切感受到了这块的前景。到个人发展部分,CTO宝哥觉得我需要快点实习,他可能没有很好地跟进近几年的教学潮流和我们学校的资源,但我认为他对我们很多“无用劳动”的定位很准,我们确实做了很多吃力不讨好的事情。

公司在紫竹一个朴素的办公楼里面,但里面的人很友好,都有技术,是一个很好的互联网环境。我们issue了很多问题。听了双花攻击testcase,看了他们和MOBI的合作,在VID和USE部分的合作,商业合作。只是觉得他们的UIUE的人有点多,不过这个公司是健康的,我有幸一窥究竟。大家伙儿对币圈产生了刻板印象,只能说,在区块链对接车联网这块还有无感停车,药物监管,还是有很多人在做事实,这也是我想待在这个行业,学习CS的一个很重要的原因,也许自己不在做很实际的东西,但至少能互联网+一个实物。我讨厌飘。

总之先搞一篇论文再说,我们再做些小制作,加进社区,社团联合看上去是不可能了。

一个小游戏的json API设计

[
{
type: 'new' | 'update',
event: {
id: [eventid]
from: [user1],
to: [user2],
type: {
level: 'is-primary' | 'is-danger' | 'is-info' | 'is-warning',
name: [typename],
},
decider: 'human' | 'car',
status: ''(unhandle) | 'accept' | 'reject',
data: { gps: [x-value, y-value], 备注: 备注123 },
price: 123,
userlevel: 0~9,

}
}
]

读《偷影子的人》有感

我只是你生活里的一个影子,你却在我的生命里占有重要地位,如果我只是个单纯的过客,为何要让我闯入你的生活?我千百次想过要离开你,但凭一己之力我做不到。

主角

暗恋一个女生的小男孩,却遭到恶霸的嫉妒。曾几何时发生在我身上的事,或许只是我们自己的臆想。我看行之声的时候哭了,不知是否会有同感, 总之,小男孩秉持着他那自卑的心情,很自然的投入自己的世界中。他爸爸出轨了,家庭的不幸,为之带来的是加剧的自卑,如声之形中主角石田将也的如西绪福斯般的努力,在社交圈中被一点点被治愈。这样的人很多吧,每有相见,则就被治愈一次。

剧情

但若仅是如此剧情,没什么新奇。作者有超能力,就是近乎读心术,只不过是要嫁接在偷影子这件小事上,一个瘦弱的小男孩自小就有种特殊能力,可以偷走别人的影子,可以和别人的影子对话,可以知道别人心中不想说出口的秘密。从而,他便扮演了一个特殊的角色,为一个个找他“诉苦”的影子,点亮小小的光芒。我曾对很多人说过“如此了解别人,却对自己的事情一无所知”,好像每一个认真聆听和建议的人都失去了内省其身的能力。瘦小的男孩,在读完全篇,我甚至连他叫什么我都不了解,真的可笑,但这无疑是他过度关注别人的表现。
小时候的死对头马格,他最好的朋友吕克,他心中的姑娘克蕾儿,他学医时代的女朋友苏菲。他每救赎一个人,都是对自己的辜负。
平淡的剧情,让我们更亲近的了解到书中的我,现实中的我是如此惊人的相似。我们内心孤独,想尽可能的融入他人的世界,却在独处时被外界抛在脑后。每一个人的关系除了亲情的联结都是脆弱的。马格代表的好似生活中的艰难险阻,也许是生活中挖苦你的人,也许是绊脚石,了解他们的心酸,原谅了他对自己的侵害,那还有什么艰难险阻不能被原谅呢?这份人生哲学有点利他,又有自己自卑的无奈,感伤之极。

爱情?「人生哲学」

聋哑人克蕾尔是真正对小男孩产生影响的人,是爱情的力量。我曾听很多人说爱情能改变一个人,我未相信,从未相信。所谓在对的时间遇到对的人,无非是命运的安排。勇敢的人需要的是契机,胖的猪是无法被风吹动的。小男孩遇上聋哑女之后终于变得勇敢起来。追逐到了自己内心的真实想法。

《设计模式》(C++)总结

之前在CS100上了解到了工厂模式和Adaptor 模式

Factory Method

class Shape{
public:
    static Shape * make_shape(int choice);
    virtual void print() = 0; //纯虚函数
};
class Circle:public Shape{/*..*/ };
class Square:public Shape{/*..*/ };
class Rectangle:public Shape{/*..*/ };

Shape * Shape::make_shape(int choice) {
    switch (choice) {
        case 1:
            return new Circle();
        case 2:
            return  new Square();
        case 3:
            return new Rectangle();
    }
}

后来写Compiler的时候觉得Factory Method可以用于传函数指针的代码生成器。

/*** Factory methods */
static string instConst(string (*inst)(const Reg &target, const Reg &op1, const Value &op2, string comment),
                            const Reg &target, const Reg &op1, const Constant &op2);
static string instConst(string (*inst)(const Reg &target, const Reg &op1, const Reg &op2, string comment),
                            const Reg &target, const Reg &op1, const Constant &op2);
static string instConst(string (*inst)(const Reg &target, const Reg &op1, int imm, string comment),
                            const Reg &target, const Reg &op1, const Constant &op2);
static string instConst(string (*inst)(const Reg &op1, const Value &op2, string comment), const Reg &op1,
                            const Constant &op2);

Adaptier Pattern

class LegacyRectangle{
public:
    LegacyRectangle(float x1,float y1,float  x2, float y2){
        m_x1=x1; m_y1=y1; m_x2=x2; m_y2=y2;
    }
    float area(){
        return (m_x2-m_x1)*(m_y2-m_y1);
    }
private:
    float m_x1;
    float m_x2;
    float m_y1;
    float m_y2;
};
class Rectangle{
public:
    virtual float areaSqInch(); //unit:square-inch
};
class RectangleAdapter:public Rectangle,private LegacyRectangle{
public:
    RectangleAdapter(float x,float y,float w,float h): LegacyRectangle(x/39.27f,y/39.37f,(x+w)/39.37f,(y+h)/39.37f){}
    virtual float areaSqInch(){
        float areaSqM = area();
        return areaSqM * 1550.0f;
    }
};

用一个双向继承关系来完成Adaptor的功能。

这是在B站上设计模式那本书的总结

非常魔性的"静态"美

很认同的一个观点

给大家泼一盆冷水,其实个人觉得大学阶段计算机学习抛开学习效率来看努力没啥意义,你天天写接口写三年,每天写12个小时,最终给你自己带来的成长是非常有限的。哪怕我最认真的时候,自己也深知自己每天有效学习时间是有限的,晚上也需要适度锻炼和休息。

这里一定要说一个大部分大一、大二都会有的误区,就是把学习 = 学习框架使用,做项目 = 做重复性很强的业务型项目。如果按照这种模式去学习是非常可怕的,只会让你看似付出很多,但效果很有限,其关键还是你的技术深度以及技术能力没有进步。

还有一种误区就是逃课,认为学校的课没有用、水,脑子里想的只有实践和做项目,但实际上,数据结构、计算机网络、操作系统这些基础课你不学好,做再多项目也没有用,对于在校学生,基础能力和项目同样重要,因为在校能做的项目基本上规模都很小,没有什么项目上的参考价值。一个合格的毕业生,项目能力和基础都是需要有的,特别是技术深度,对于想进一步的同学尤其重要。

从周围同学的就业情况来看,一方面就是基础能力,另一方面就是自己在某个领域的深度和透彻程度,努力是必要的,但也不要觉得自己每天做项目是“很努力”,几点起床不是衡量一个人努力的标准,几点睡觉也同样不是。这其实是一个学习心态,因为将来等大家面临春招、秋招,一方面是个人能力,另一方面就是心态,抱着我这么努力心态去参加面试个人觉得不是一个好心态。

这其实是一个心态上由高中生往大学生的转变,看别人多努力是典型的高中生心态,而大学生应该在意的是自己目前的规划和行动,因为不同人的目标、处境不同,自然需要的行动也不同。

最后提醒一下同学们,千万千万不要过度透支自己的身体,不要做只感动自己的努力,身体永远是第一位。