学习内容:
1、Java的类、构造方法
2、博弈基础
3、刷题
4、栈和队列
学习时间:
8:00~8:05 签到
9:00~12:00 Java的类、构造方法
1:00~2:30 刷题
3:00~4:30博弈基础
5:00~6:00 栈和队列
今天学习了一下博弈基础后面两个,完全懵逼,看别人推理的头头是道,复习了一下队列和栈,栈的四则运算看的也是懵逼。
威佐夫博奕
例子:有两堆糖果,a、b,(a<b),两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
公式:
if((b-a)*(1+sqrt(5))/2.0==a) printf("后手赢"); else printf("先手赢");
反尼姆博弈
例子:在n堆糖果中,每人每次只能在一堆里面拿1~无限个,当取完最后一个时该人失败。
公式:当全部异或为0&&每堆糖果数量都不大于1||异或不为0&&有糖果堆数量大于1。
栈
原理:只能在表的一端进行插入和删除的运算的线性表,先进后出。
四则运算:
前缀表达式
中缀表达式
后缀表达式
构造出二叉树,然后用前、中、后缀遍历,即可得。
后缀计算原理
从左到右遍历,遇到数字进栈,符号,将栈顶两数字出栈计算,计算是后运算符前,然后将结果进栈。
队列
原理:在后面删除数据,在前面插入数据。先进先出。