- 博客(49)
- 收藏
- 关注
原创 第7讲-SQL语言复杂查询之视图
三级模式两层映像:对应概念模式的数据在SQL中被称为基本表,而对应外模式的数据称为视图。视图不仅包含外模式,而且包含E-C映像。SQL数据库结构: 1)基本表是实际存储文件的表,基本表中的数据时需要存储的。 2)视图在SQL中只存储其由基本表导出视图的所有公式,即由基本表产生视图的映像信息。视图并不存储数据。 3)对视图数据的更改最终要
2016-05-06 22:49:00 1952
原创 第7讲 -SQL语言关系代数实现
(1)SQL语言集合运算,并UNION,交INTERSECT,差EXCEPT基本语法: 子查询1{Union [ALL]|Intersect [ALL]|Except [ALL] 子查询2}通常下,删除重复元组不带ALL,若要保留重复元素就要带ALL子查询1的一个元组出现m次,子查询2的一个元组出现n次在,在结果中: 1)子查询1 Union ALL
2016-05-06 00:29:01 2456
原创 第7讲 SQL复杂查询---聚集函数以及分组过滤
聚集函数:Count: 求集合元组个数SUM :求和AVG :求平均MAX: 求最大MIN : 求最小例:求计算机系教师工资总额。select SUM(salary)From Teacher T,Deptwhere T.Dname='计算机' and Dept.D#=Teacher.D#;例: 求数据库课程的平均成绩。
2016-05-03 23:11:55 1289
原创 第7讲-SQL语言复杂查询--(NOT)Exists
SQL语言复杂查询-(NOT) Exists语法:[not] Exists(子查询)语义:子查询有无元组存在例:检索选修了赵三老师主讲课程的所有同学姓名。select DISTINCT Sname From studentwhere exists (select * From SC,Course,Teacherwhere SC.C#=Course.C#
2016-04-29 11:20:35 956
原创 第7讲 SQL语言复杂查询之-Theta-some与Theta-all
Theta-some与Theta-all(子查询)语法: 表达式 Theta some (子查询) 表达式 Theta all (子查询)其中 Theta 是比较运算符: ,>=,=.语义将表达式的值与子句进行比较: 1.如果表达式中至少与子查询结果比较有一个满足 Theata关系,“ 表达式 Theta so
2016-04-28 13:11:15 940
原创 第7讲-SQL语言复杂查询-(NOT) in语句
有的时候会有以下条件的判断: 1)某一元素是否是某一集合的成员 2)集合之间的比较,某一集合是否属于另一集合 3)测试集合是否为空 4)判断集合是否有重复的元组 ......子查询的定义:出现在where语句的select语句被称为子查询。子查询返回一个集合,可以通过这个集合的比较来确定另一个集合。
2016-04-27 14:55:25 2089
原创 第6讲 SQL语言概述
1.SQL语言是集DDL,DML,DCL为一体的语言。它主要由9个单词操作构成: 1)DDL : Create (建立),Alter(删除),Drop(撤销)。模式的定义和删除。包括 Database,Table,View,Index.以及完整性约束条件等。 2)DML : Insert, Delete, Update, Select各种问题
2016-04-24 18:30:22 719
原创 单源最短路径Dijstra算法
Dijstra算法是寻找从某一顶点i出发到大其他顶点的最短路径。Distra算法的思想与Prim算法很像,它收录顶点的规则是按照路径长度递增的顺序收录的。设v0是源顶点,我们要寻找从v0出发到其他任意一点的最短路径。设已经求解的顶点(已经找到从v0出发到达该顶点最短路径的顶点)组成的集合是S={v0,v1,...vk};在收录下一个顶点v的时候要么是(v0,v),要么是(v0,vj,v);如果是后
2016-03-30 23:00:13 1822
原创 hdu1242
这个题目采用BFS,需要注意以下几点: 1)朋友不止一个,只需要找到所有朋友中到达Angle的最小时间。即可以从a出发找最近的r。 2)由于在有x的地方花费时间是2,其他空地是1.这时需要用到优先队列,每次弹出的是时间最短的节点。(以后写BFS还是DFS时需要注意先标记再入栈,如果先入栈,弹出时再标记,可能导致同一个节点入栈多次,以后得注意了。在这个位置老是WA)#
2016-03-27 18:01:23 464
原创 hud1875
1.Prim算法#include#includeusing namespace std;#define MAX_SIZE 102struct Point{ double x, y;};bool visit[MAX_SIZE]; //记录点j是否在树中int Parent[MAX_SIZE]; //记录父节点double LowCost[MAX_S
2016-03-24 20:12:22 386
原创 hdu1102最小生成树
1.使用kruskal算法 题目中给出了一些道路,这些道路将村庄构成了部分连通集。我们要求的是使得整个村庄连通花费最小的道路长度和。实际上就是一个最小生成树问题.。在这里我们已知了给出的一些边(可能不是整个图最小生成树的边,不过这不要紧,只需要接下来我们选择的边长度和最小即可)。在给出的边的集合已经构成了部分连通集,接下来我们将所有的边放在一个最小堆中,每次取出权重最小的边,看边
2016-03-24 11:23:26 822
原创 hdu 1232畅通工程
这是一个比较简单的并查集题目。我们把每一片城区看做一个集合(图的一个连通集),然后统计一共有k个集合,连接两个集合需要1条边,从而整个需要 k-1条边。#includeusing namespace std;#define MAX_SIZE 1000int parent[MAX_SIZE];int findParent(int i);void Union(int i, int j);i
2016-03-23 17:40:16 343
原创 DFS与BFS
1.深度优先搜索(DFS) 深度优先搜索类似于树的先序遍历,是树的先序遍历的推广。在图是连通的情况下,可以从图的任意v一顶点出发,访问该顶点,然后依次从v的没有被访问的邻接点进行同样的深度优先搜索。访问时需要定义一个布尔数组 visite[ i ]来记录第i个顶点是否访问过。递归和非递归代码如下:void DFS(int i){ visit[i] = true; //访
2016-03-22 14:02:40 444
原创 图的存储
1.邻接矩阵 一维数组存储顶点信息,用二维数组存储边信息。空间复杂度为O(n^2),无向图的邻接矩阵一定是对称的,它的第i行或者第i列不为0或者∞的元素个数正好是 顶点 i或者j的度。用邻接矩阵很容易知道两条边之间是否有边相连,而且也很直观简单。但是要确定图中有多少条边的时间复杂度是O(n^2),在存储稀疏图时还会浪费大量的空间,这是邻接矩阵的局限性。2.邻接表 邻接表是
2016-03-21 23:01:06 480
原创 图论基本定义和术语
1.图的定义 图(Graph)是由两个集合构成,一个是非空但是有限的顶点集合V,另一个是描述结合间的关系边的集合E,因此图可以表示为G=(V,E).每条边是一对顶点(v,w)且 v,w∈V.通常|V|和|E|表示顶点个数和边的数量。值得注意的是图中顶点一定不能为空,而边可以为空。 2.图的相关术语 1)无向图:无向图是指图中的边没有方向性即边(v,w)与边(
2016-03-21 20:53:55 12721
原创 hdu3608最长回文子串
首先做这个题目时候以为是动态规划,可惜的是超时了。虽然超时了,但还是先说说动态规划。设原串为s用DP[i,j]表示s[i...j]中最大回文字串的长度,则DP[i,j]的子问题可以划分为DP[i+1,j],DP[i,j-1],以及DP[i+1,j-1].当然还需要一个数组flag[i,j]来记录状态。若flag[i,j]=1,则它表示在 s[i,j]中两个端点字符s[i】与s[j] 是s[i..j
2016-03-20 12:41:26 492
原创 hdu3746 Cyclic Nacklace
看好半天才明白题意。题目大意是说给定一个串,需要在两端加上一些字符,求最少加上多少字符可以使得这个串成为周期循环串。由于要构成环,所以在两端加字符和在一端加其实没什么区别,于是我们只考虑在右端加字符。其实这就是KMP算法中的Next表的应用,所以需要很好的理解Next表格的含义。 先来回顾下Next[j]的含义。设模式串为P[0...m-1],则Next[j]表示P的前缀串P[0
2016-03-20 11:25:53 331
原创 C语言的输入与输出
在提交ACM代码时,C++的输入输出在时间上并不占优势,而C语言的 printf 和 scanf 相对来说效率更高。所以在比赛时,尽量选择使用C语言的输入输出。C语言本身不提供输入输出语句,输入输出操作是C语言标准库的函数来实现的。在C的标准库函数提供了输入输出函数,例如printf函数和scanf函数。它们不是C的关键字,而是库的函数名。 1. printf 函数的一般格式:prin
2016-03-19 21:32:05 2154
原创 KMP算法
KMP算法的全称为:Knuth-Morris-Pratt 。朴素算法效率不高根本原因在于进行了多次重复的比较,没有充分利用已匹配的字符的信息。设文本为T,匹配模式为P;例如: T : a b a b c d a b b a b a b a d P : a b a b a b a上面模式P与文本匹配,在从开始匹配到字符T[4]!=P[4]时,普通
2016-03-18 11:18:39 677
原创 朴素字符串匹配与Karbin-Karp算法
字符串的精度匹配就是在文本T中找出模式P的精确副本,并求出匹配的位置下标。即如果P[0...m-1]==T[k...k+m-1] ,则称P与T的子序列匹配成功。我们要找出所有匹配成功的k。 朴素字符串匹配方法很简单。从文本T的第一个字母和模式P的第一个字母开始比较。如果不匹配,就从T的第二个字母开始匹配,依次类推,不保留所有有用得信息。设P和T的长度分别为m和n .这
2016-03-17 23:05:37 569
原创 HDU1686
这个题目是字符串匹配算法的入门题。题目如下:OulipoTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 8961 Accepted Submission(s): 3619Problem Descript
2016-03-17 20:37:53 377
原创 HDU2089 数位DP
原问题是求区间 [ n, m ]中,不含数字4和62的数的总个数.采用的办法是数位 DP。定义数组 dp[i][2],他的含义如下: dp[i][0] : 表示数字最大长度是 i 且不含4和62的数总个数。 dp[i][1] : 表示数字的最大长度是 i 且不含 4 和62,但是最高位是2的数总个数。于是:dp[i][0]=dp[i-1][0]*9-dp[i-1][1];
2016-03-15 17:51:51 340
原创 HDU 5642 数位DP
对于这种问题,首先要找到一个很好的分类办法。由于最大连续的字母不可以超过3个。于是可以按照字符串最后的字符连续重复的次数分为:最后字符重复1,2,3次这3中情况:定义dp[i][4]; dp[i][1] : 表示长度为 i 的字符串在第 i 个位置重复了 1 次。 dp[i][2] : 表示长度为 i 的字符串在第 i 个位置重复了 2 次。 dp[i][3]
2016-03-15 13:56:37 595
原创 hdu3555 数位DP
这个题算是数位DP的入门,第一次接触数位DP。自己没有解决出来,参看了好几位大神的博客。直接进入这个问题吧。 首先定义数组DP[i][3],含义如下: DP[i][0] : 表示最大长度为 i 的数字中不出现 “49”的数字总个数。 DP[i][1]:表示最大长度为 i 的数字中不出现“49”,但是最高位是“9”的数字总个数。 DP
2016-03-14 19:33:19 316
原创 关系模型之关系代数
·1.关系代数式基于集合操作的的一系列关系代数操作:并,差,笛卡尔积,选择,投影,更名,连接。关系代数的输入是多个关系,结果是一个新的关系。关系代数是一种抽象的语言,它是学习其他数据库语言的基础,比如说SQL语言。 2.基于关系代数的操作:并,差,交等必须满足”并相容性“。参与运算的两个关系间的相关属性有一定的对应性。关系R与关系S是“并相容的”当且仅当: a.R与S的
2016-03-13 21:19:02 1311
原创 约瑟夫问题与变形
1.约瑟夫问题:n个人编号为0...n-1.围成一个圈。从编号为0的人开始顺时针计数,每数到k个人时让其出局(第一次出局的是编号为(k-1)mod n的人),接着又从下一个人开始计数。经过n-1轮报数后,求最终留下的人的编号。 我们只关心最后一个留下的人,比如,当删除第一个人后,也就是删除编号为(k-1)mod n的人,此时我们要求的人就是剩下n-1个人中最后留下的那个人。用F[i
2016-03-12 23:10:42 934
原创 关系模型基本概念
1.关系模型的提出: 关系模型最早是由E.F codd在1970年提出来的。是从表(table)以及表的处理中抽象出来的。是在传统表以及其上面的操作严格化的数学定义上引入“集合理论”与“逻辑学理论“.关系模型是数据库的三大典型模型之一。也是现在大多数商业数据库使用的模型。2.关系模型研究的内容:形象的说,一个关系就是一个Table,而关系模型就是来处理Table的。它描述了
2016-03-11 16:22:15 3851
原创 并查集
在一些有N个元素构成的一些单元素的集合,需要反复查找一个元素在哪一个集合中,判断两个数是否属于同一个集合,以及合并两个集合。并查集是一种树型的数据结构。用于处理不相交的集合( disjoint sets)的合并以及查询问题。在使用时用森林表示。如集合A={0,1,3,6} , B={ 2,4 7} , C={5,8,9}其A,B,C分别构成三棵树,A,B,C共同构成一个森林,并查集一般用数组存
2016-03-10 16:36:47 293
原创 POJ 2503
DescriptionYou have just moved from Waterloo to a big city. The people here speak an incomprehensible dialect of a foreign language. Fortunately, you have a dictionary to help you understand them.
2016-03-09 23:11:20 274
原创 HDU 2557 How to type
Problem DescriptionPirates have finished developing the typing software. He called Cathy to test his typing software. She is good at thinking. After testing for several days, she finds that if she
2016-03-09 14:20:26 390
原创 第二讲 数据库系统结构抽象
1数据库的分层抽象 DBMS管理数据库的三个层次: 1) External Level / User Lever .外部层次或者叫用户层次。指的是某一用户能够看到的数据,即全局数据的某一部分。 2)Conceptual Lever / Logic Lever
2016-03-08 18:28:28 942
原创 完全背包问题
完全背包问题二进制法与转换为01背包问题,还有O(NV)的算法。的特点是每种物品数量没有限制,可以无限使用。很容易定义完全背包状态转移方程,设第i个物品选择k个,于是:
2016-03-06 16:46:46 403
原创 01背包问题
01背包问题描述:给定N个体积为V1....Vn,价值为P1...Pn的物品和一个体积为V的包,求能够装进包中物品的最大价值。为了设计一个动态规划算法,我们需要导出状态转移方程。先考虑原问题的子问题,假设我们考虑前i个问题,背包容积为j,记将前i个物品装到容积为j的包中最大总价值为W[i,j];每个物品只有选择和不选择两种情况,我们根据第i个物品是否选择进行分类。在不包含第i个物品的最优解价值
2016-03-06 14:19:29 479
原创 认识数据库系统
数据库是电子化信息的集合,将信息规范化并电子化,形成电子信息库。以便计算机对这些信息进行快速有效的存储,统计,检索与管理。数据库Database是相互有关联关系的表的集合,每一个表里面数据间有相关关系,表与表之间也有关系。 数据库系统: 1.数据库(DB:Database) 2.数据库管理系统(DBMS : Database Managemen
2016-03-06 12:50:17 1182
原创 动态规划
动态规划(dynamic programming)与分治法相似,都是通过组合子问题的解来构造原问题的解。不同的是,分治法是将原问题划分为不想交的子问题,而动态规划则应用于子问题重叠的情况。动态规划通常用来求解最优化问题。有的时候最优解有多个。设计一个动态规划算法的步骤: 1.刻画一个最优解的结构特征 2.递归的定义最优解的值
2016-03-05 21:39:14 298
原创 哈希表应用之字符子串统计
问题描述:给出一个字符串,包含nc中字符,求这个字符串中长度为n的字串(不包括重复的)的数量。题目中假设字串数目不超过16 000 000 个。输入第一行包含两个数字n nc,第二行输入字符串。输出符合要求的子串个数。 输入: 3 4 daababac 输出: 5题目中
2016-03-05 20:31:14 730
原创 统计一篇短文中单词出现频率
散列查找的应用:给定一个英文文本文件,统计文件中所有单词出现的频率。解决这问题最基本的工作是不断地对读入的单词在已有的单词中查找,如果存在就将该单词频数加1,如果不存在就将该单词插入并记录频数为1.下面C++代码的哈希函数使用了双重探测的办法。在确定表的时候是取比输入整数小且距离输入整数最近的素数。#include#include#include#include#includeu
2016-03-05 18:05:02 1224
原创 二叉搜索树基本数据结构实现
二叉搜索树基本数据结构实现,非递归与递归。二叉搜索树中一个结点包含3个指针left,right, prev和一个卫星数据key。这三个指针分别指向左儿子,右儿子,父节点。如果孩子结点和父亲结点不存在,相应指针为空。根结点的prev指向空。 1)遍历(中序遍历,先序遍历,后续遍历) 2)查找一个关键字,返回该关键字的结点指针 3).返回最大关键字最小关键字结点指针 4)寻找关键字key的后继结点
2016-03-04 14:49:37 529
原创 模板编程的文件组合方式
在模板编程时,当你出现error:Link2019,在main中出现无法解析的现象时。 由于模板的实例化发生在第一次使用模板的地方。而实例化是以模板定义的代码来参照的。这样一来就要求模板定义与模板使用同在一个编译单元(源文件)。既然使用模板首先需要模板声明,而且模板定义要求在使用模板同一个编译单位中,因此一般做法是将模板的整个定义都放在头文件内。如果是类模板,需要将类模板定义和成员
2016-03-04 14:35:27 312
原创 散列表
1.直接寻址法:当关键字的全域U很小时,直接寻址法是一种简单而有效的技术。设集合U={0,1,2...m-1},我们用一个数组或叫直接寻址表记为T[0...m-1],数组每一个位置对应U中的一个关键字。T[k]存放关键字K,若集合中没有k关键字则T[k]=NIL; 直接寻址法缺点非常明显:如果全域U非常大,可能就存不下直接寻址表T,如果实际存储关键字太少,也可能造成大量空间的浪费。
2016-03-01 15:05:14 441
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人