关系运算

Java千问:Java位运算经典应用(二)

一笑奈何 提交于 2020-02-25 23:30:50
接上篇 三、不借助中间变量交换两个变量的值 通常情况下,我们要交换两个变量的值都按如下步骤操作: 这种操作方式不难理解,实现交换变量值的关键点就在于中间变量c。而现在的题目要求是不借助中间变量来交换a和b的值。如果不使用位运算的方式,同样可以做到不借助中间变量交换两个变量的值,其实现过程如下。 为了讲解方便,我们把最初a与b的值称之为原始a和原始b,3行代码就是3步操作: 第1步:把原始a与原始b相加的和存储到变量a中,变量b的值暂时没有发生变化。 第2步:用这个和减去原始b,再赋值到变量b中,经过这一步运算,变量b中就保存了原始a的值。 第3步:用原始a、b之和减去原始a的值,就得到原始b,并且把这个值保存到变量a中。 通过以上3步就实现了a、b两个变量在不借助中间变量的情况下进行值的交换。这种算法虽然没有借助中间变量,但有一个问题是如果a和b都是较大的数,在做第1步操作的时候就有可能出现两值相加的和超出int类型的最大值,产生溢出的现象,从而导致后面的运算全部出错。 而我们用位运算的方式实现交换,就不存在这个问题了。具体代码如下: 讲述这段代码之前,先回顾一个运算规律,那就是: a^b^b的运算结果等于a 。对此运算规律有疑义,请阅读《 Java千问:Java语言位运算符详解 》一文。为了表述方便,我们把a^b的操作称之为”用b对a加密”,之所以这么称呼

数据库第二章总结

南笙酒味 提交于 2020-02-25 16:14:48
说明一下:下面会有大量的截图,因为我打不出符号 复习:笛卡尔积 A = {1,2,3}; B = {a,b,c} A * B = { (a,1)(a,2)(a,3), (b,1)(b,2)(b.3), (c,1)(c,2)(c,3) } num = Na * Nb 可以推广到一般形式   存在 集合 A,B,C,D …… n, 则其笛卡尔积: A * B * C * D * …… * n = { (A1,B1,C1,D1,……,n1),(A1,B1,C1,D1,...,n2), ... } NUM = Na*Nb*Nc*Nd*...*Nn (所有的n不一定相等) ps:笛卡尔积会产生 关系:P33 属性: 都有一个名称 允许存在一个属性集合 属性必须时原子的,即不可分割(1NF,第一范式) 多值属性值不是原子的 符合属性值不是原子的    4. 特殊值null是每一个域的成员   ps:空值会给数据库访问带来困难,需要避免使用 概念: 1、关系模式:描述关系的结构 2、关系实例:表示关系的一个特定实例,也就是所包含是一组特定行 变量     -->   关系 变量类型    -->   关系模式 变量值    -->   关系实例 码、键: 1、某个值能够在一个关系中唯一的标志一个元组,则K是R的 超码 例如:身份证号码、学号或者身份证号加学号加银行卡号 2、 候选码 :

记C++中发现的隐式转换问题

痴心易碎 提交于 2020-02-25 01:05:21
1 #include <iostream> 2 #include <string> 3 using std::cin; 4 using std::cout; 5 using std::endl; 6 using std::string; 7 int main() 8 { 9 unsigned int a; 10 int b = -1; 11 while (cin >> a) 12 { 13 if (a > b) 14 { 15 cout << "a > b" << endl; 16 } 17 else if (a < b) 18 { 19 cout << "a < b" << endl; 20 } 21 else 22 { 23 cout << "a == b" << endl; 24 } 25 26 } 27 return 0; 28 } 解释: 如果算术运算或关系运算的运算对象有多种类型,需要转换成同一种类型。   这个涉及到无符号类型的运算对象:     如果某个运算符的运算对象不一致,这些运算对象将转换成同一种类型。但是如果某个运算对象的类型是无符号类型,那么转换的结果就要依赖机器中各个整数类型中各个整数类型的相对大小了。     像往常一样,首先执行整型提升。如果结果的类型匹配,无需进行进一步的转换。如果两个(提升后的)运算对象的类型要么都是带符号的、要么都是无符号的

HTTP Get与Post请求

假装没事ソ 提交于 2020-02-24 05:08:12
HTTP定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为:一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。 1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。 (1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET 请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。 * 注意:这里安全的含义仅仅是指是非修改信息。 (2).幂等的意味着对同一URL的多个请求应该返回同样的结果。这里我再解释一下幂等这个概念: 幂等(idempotent、idempotence)是一个数学或计算机学概念,常见于抽象代数中。 幂等有一下几种定义: 对于单目运算,如果一个运算对于在范围内的所有的一个数多次进行该运算所得的结果和进行一次该运算所得的结果是一样的,那么我们就称该运算是幂等的。比如绝对值运算就是一个例子,在实数集中,有abs(a)=abs(abs(a))。 对于双目运算,则要求当参与运算的两个值是等值的情况下

JavaScript基础语法

喜夏-厌秋 提交于 2020-02-23 19:11:12
【使用JS的三种方式】 1、在html标签中,直接使用JS(并不提倡使用): 栗子:<button onclick="alert('我好啊')">点本宝宝</button> 不符合内容与行为分离的要求! 2、在html页面中使用<script></script>包裹JS代码: 栗子:<script type="text/javascript"> JS代码; </script> script标签可以放到页面的任何位置。 3、引入外部的JS文件 <script language="JavaScript" src="JS/01.js" ></script> 【注意事项】 1、<script></script>可以嵌入页面的任意位置。但是,位置的不同会导致JS代码的执行顺序不同; 比如:<script></script>放到<body></body>前面,则JS代码会在页面加载之前执行。 2、引入外部的JS,<script></script>必须是成对出现的标签。而且,标签中不能有任何JS代码。 JS中多行注释。ctrl+shift+/ JS中单行注释。ctrl+/ 【JS中变量】 1、JS中变量申明的写法: var num=1;//使用var申明的变量,属于局部变量,只在当前作用域有效; num=1;//不用var申明的变量,默认为全局变量,在整个JS文件中有效。 var x=1,y=2

报表引擎 - 报表应用思路

孤街浪徒 提交于 2020-02-23 04:28:34
   OpenExpressApp 计划之内包括一个报表引擎OpenReport。2006年时在公司负责研究并实现了一个报表引擎,写了几篇博文( 《交叉表的报表设计》 、 《研究润乾报表的实现》 、 《使用Antlr实现表达式引擎》 )。OpenReport的报表模型将会和我已经实现的差不多,但是有些主要差别就是,OpenReport除了支持数据集,还可以基于对象,在设计器上和使用上将会更易用更方便,会更多考虑业务人员的使用和一些BI。但是实现起来会花更多时间和精力,而现在我的精力毕竟有限,所以 还没有开始OpenReport的工作,目前OEA主要还是集中在应用框架上。    现在还有人看到我以前的两篇和报表相关的博文并非常感兴趣,但由于那个报表引擎不是开源产品,所以不能公布代码,在这里 我就将以前写的一些文档发布一下 ,给那些需要或者感兴趣的人借鉴一 下。我之前也是看了别人的一些文档而作出来的这个报表引擎,所以研究报表引擎的看完这些文档之后应该就会有大体感觉。   这个系列将会发布多篇,感兴趣的可以留意一下。本篇为第一篇,将从总体上介绍一下报表应用思路,这是我2006年1月份在刚开始研究报表几周后写的。就像很早以前博文 《研究润乾报表的实现》 所说,这里的模型主要是参考润乾报表的,我觉得它是我研究时期看到的最好的模型。现在润乾有一个免费版本 快逸报表 ,强烈建议研究报表的去用一下

web报表工具的制表效率分析

被刻印的时光 ゝ 提交于 2020-02-23 03:51:16
所谓报表工具,最核心最本质的功能,就是它的制表能力,即是否能够不写代码而制作出自己需要的各种报表工具。但用户在考察报表工具时往往很注重打印输出、绘制方案、管理调度等外围因素,而忽视了报表工具最本质的制表能力。当然不可否认这些外围的功能对一个报表工具来说也是很重要的衡量标准,但是报表工具的主要用途是制作报表,而且事实上,市场上的主流产品在处理复杂报表时确实存在明显缺陷,并不能很好地制作出我们需要的报表,半数以上报表仍需编写代码准备数据,导致工具失去意义。因此,考察制表效率对于选择报表工具是至关重要的。 扔掉条子 报表绘制的方法一般有 网格式 和 控件拖拽式 两种,前者采用和 EXCEL 类似的方案,用网格线围出报表;而后者则是用矩形框等元素拼出报表。 国内报表对样式要求非常复杂而且严格,绘制方案是报表工具相当重要的指标,它决定了报表样式的复杂度和绘制效率,特别是对于格线比较多的表。 传统的报表绘制,大多数是呈条带状,用的拖拽式,拿部件拖来拽去。表格线需要靠矩形边框重合摆放拼接出来,常见的复杂多层表头画起来非常繁琐,数据区某些纵向合并格甚至无法绘制出来 ( 或者需要特定程序控制才能实现 ) ,拼出的格线还与分辨率相关,屏幕上对齐的表在打印时或在 WEB 上显示时又可能不整齐。 网格式在这方面有明显的优势,能够画出样式很复杂的报表,绘制效率也比控件拖拽式高出许多。由于 MS Excel

位运算

别来无恙 提交于 2020-02-20 10:23:11
1.位运算概述 从现代计算机中所有的数据二进制的形式存储在设备中。即0、1两种状态,计算机对二进制数据进行的运算(+、-、*、/)都是叫位运算,即将符号位共同参与运算的运算。 口说无凭,举一个简单的例子来看下CPU是如何进行计算的,比如这行代码: int a = 35; int b = 47; int c = a + b; 计算两个数的和,因为在计算机中都是以二进制来进行运算,所以上面我们所给的int变量会在机器内部先转换为二进制在进行相加: 35: 0 0 1 0 0 0 1 1 47: 0 0 1 0 1 1 1 1 ———————————————————— 82: 0 1 0 1 0 0 1 0 所以,相比在代码中直接使用(+、-、*、/)运算符,合理的运用位运算更能显著提高代码在机器上的执行效率。 2.位运算概览[td] 符号 描述 运算规则 & 与 两个位都为1时,结果才为1 | 或 两个位都为0时,结果才为0 ^ 异或 两个位相同为0,相异为1 ~ 取反 0变1,1变0 << 左移 各二进位全部左移若干位,高位丢弃,低位补0 >> 右移 各二进位全部右移若干位,对无符号数,高位补0,有符号数,各编译器处理方法不一样,有的补符号位(算术右移),有的补0(逻辑右移) 3.按位与运算符(&) # 定义:参加运算的两个数据,按二进制位进行“与”运算。 运算规则: 0&0=0 0

动手学习深度学习-----笔记二

China☆狼群 提交于 2020-02-18 14:22:44
1 过拟合、欠拟合及其解决方案 一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting); 另一类是模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。训练误差(training error)指模型在训练数据集上表现出的误差和泛化误差(generalization error)。指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。 在实践中,我们要尽可能同时应对欠拟合和过拟合。虽然有很多因素可能导致这两种拟合问题,在这里我们重点讨论两个因素:模型复杂度和训练数据集大小。 给定训练数据集,模型复杂度和误差之间的关系: 一般来说,如果训练数据集中样本数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。此外,泛化误差不会随训练数据集里样本数量增加而增大。 1.1 权重衰减方法 权重衰减等价于 L 2 L_2 L 2 ​ 范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。 1.1.1 L2 范数正则化(regularization) L 2 L_2 L 2 ​ 范数正则化在模型原损失函数基础上添加 L 2 L_2 L 2 ​ 范数惩罚项,从而得到训练所需要最小化的函数。 L 2 L_2 L 2 ​

深入理解按位异或运算符

倾然丶 夕夏残阳落幕 提交于 2020-02-17 06:15:40
异或运算: 首先异或表示当两个数的二进制表示,进行异或运算时,当前位的两个二进制表示不同则为1相同则为0.该方法被广泛推广用来统计一个数的1的位数! 参与运算的两个值,如果两个相应bit位相同,则结果为0,否则为1。 即:   0^0 = 0,   1^0 = 1,   0^1 = 1,   1^1 = 0 按位异或的3个特点: (1) 0^0=0,0^1=1 0异或任何数=任何数 (2) 1^0=1,1^1=0 1异或任何数-任何数取反 (3) 任何数异或自己=把自己置0 按位异或的几个常见用途: (1) 使某些特定的位翻转 例如对数10100001的第2位和第3位翻转,则可以将该数与00000110进行按位异或运算。       10100001^00000110 = 10100111 (2) 实现两个值的交换,而不必使用临时变量。 例如交换两个整数a=10100001,b=00000110的值,可通过下列语句实现:     a = a^b;   //a=10100111     b = b^a;   //b=10100001     a = a^b;   //a=00000110 位运算 位运算时把数字用二进制表示之后,对每一位上0或者1的运算。理解位运算的第一步是理解二进制。二进制是指数字的每一位都是0或者1.比如十进制的2转化为二进制之后就是10。