文档库 最新最全的文档下载
当前位置:文档库 › 作业散列法实验研究

作业散列法实验研究

作业散列法实验研究
作业散列法实验研究

课程设计题目

1. 具体要求

散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方法,做实验观察,不同的解决冲突方法对查询性能的影响。

2.开发环境

VC++ 6.0

3. 算法设计思想

散列又称哈希或杂凑。散列法(Hashing)在表项的存储位置与它的关键码之间建立一个确定的对应函数关系Hash(),以使每个关键码与结构中的唯一存储位置相对应,该关系可用下式表示:

Address=Hash(Record.key)

相应的表称为哈希表,这种方法的基本思想是:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系H,使得p=H(k),H称为哈希函数。创建哈希表时,把关键字为k的元素直接存入地址为H(k)的单元;以后当查找关键字为k 的元素时,再利用哈希函数计算出该元素的存储位置p=H(k),从而达到按关键字直接存取元素的目的。

哈希函数是一个映象,哈希函数的设定灵活,只要使得任何关键字所得的哈希函数值都落在表长范围之内即可。

当关键字集合很大时,关键字值不同的元素可能会映象到哈希表的同一地址上,即 k1≠k2,但H(k1)=H(k2),这种现象称为冲突,此时称k1和k2为同义词。实际中,冲突是不可避免的,只能通过改进哈希函数的性能来减少冲突。

综上所述,哈希法主要包括以下两方面的内容:

(1)

(2)如何处理冲突。

4. 数据结构与算法描述

一、散列函数

通常,构造散列函数应该注意的几个问题包括:首先,散列函数的定义域必须包括需要存储的全部关键码,而如果散列表允许有m个地址,其值域必须在1~m-1之间;其次,散列函数计算出来的地址应能均匀分布在整个地址空间中;再次,散列函数应当是尽量简单的。

(1)直接定址法

直接定址法蓝颜元素关键码的某个线性函数值作为该元素的散列地址(散列地址,即元素最终在字典中的存储位置)。如下面的函数式:

Hash(key)=a×key+b

式中,a,b为常数。采用该种方法,当向字典中加入某一新元素时算法自动调用此函数,以确定该元素最终的存储位置。若某元素关键码key为1,上式中,a=2,b=3则该元素最终会存储在字典第5个位置中。

直接定址法的优点是实现方法简单,算法时间复杂度较小,而且不会产生冲突。但是,直接定址法要求散列地址空间的大小与关键码集合的大小一致,而这种要求是苛刻的,一般很难实现。例如当关键码的范围为1~1000000时,元素散列地址的个数也要达到1000000。这么大的散列地址是不合实际的。

(2)除留余数法

设散列表中允许的地址数为m,取一个不大于m,但最接近或等于m的质数k,或选取一个不含有小于20的质因子的合数作为除数。利用下面的式子计算元素的散列地址的方法称为除留余数法。

Hash(key)=key%k,k≤m

其中,“%”是整数除余法取余的运算,要求这时的质数不是接近2的幂。例如,当元素的关键码key为2008,散列地址总数为50,这时取k=47,则散列地址为Hash(2008)=2008%47=34,所以运算将存储在字典第47个位置中。

除留余数法将有效缩减散列地址空间的大小,例如上例散列地址空间中只有50个有效的散列地址。除留余数法的缺点是极易发生冲突,如关键码为1914的元素经过上述教例函数计算后也将获得散列地址34。此时出现的两个不同元素争用同一存储地址的情况就称为冲突。

(3)平方取中法

平方取中法是一种常用的实现散列函数的方法。

平方取中法是一种先放大再集合的构造方法,这种构造模式先通过求关键字的平方值扩大相近数的差别,然后根据表长度取中间的几位数作为散列函数值,这种取中间数的方法是一种类随机方案,因此也可以认为平方取中法是一种产生伪随机数的方法。因为一个乘积的中间几位数和乘数的每一位都相关,所以有此产生的散列地址较为均匀。

利用平方取中法实现散列函数的过程:首先,利用一定的编码规则把元素的关键码转换成标识符。然后,求出标识符的内码表示并计算内码的平方值。最后,取内码平方数的中间x位作为元素最终的散列地址。简而言之,即先计算构成关键码表示符的内码平方,然后按照散列表的大小取中间的若干位作为散列地址。在平方取中法中,地址空间内散列地址的数目一般为2的k次幂,并在计算出内码平方的平方后,根据k的大小决定最终散列地址的位数。例如某个地址空间

中散列地址的个数为128,则最终取内码平方中间7位作为元素最终的散列地址。

(4)乘余取整法

乘余取整法利用下面的式子计算元素的散列地址。

Hash(key)=[Z×(a×key%1)]

其中,a为一个常数且0

乘余取整法不但会缩减散列地址空间的大小,还能极大减小冲突情况的发生几率。Knuth对常数a的取法做了仔细的研究,发现虽然a取任何值都可以,但一般取黄金分割数0.6180339比较好。

(5)折叠法

折叠法的工作方式很有趣,此方法把关键吗从左至右划分为位数相等的几部分,每一部分的位数与散列地址数相同。当关键码位数不能被散列地址位数整除时,最后一部分可取得短些。

折叠法有两种,即位移法和分界法。其中,位移法所采取的具体方式是把各部分的最后一位对齐相加。分界法所采用的具体方式是各部分不折断,而沿各部分的分界来回折叠,然后对齐相加,并将相加的结果当做散列地址。折叠法适用于关键码位数很多,且每一位上数字分布比较均匀的情况。下面通过实例演示这两种方法的工作方式。

设关键码key=987654321,散列地址为4位。位移法和分界法计算散列地址的算式如图所示。

98769876

5432 2345

+ 1 + 1

15309 12222

移位法分界法

由式可见,位移法计算结果为15309,由于散列地址为4位,所以舍去最高位数字1,元素最终的散列地址为5309。分界法结算结果为12222,同样舍去最高位数字1,元素最终的散列地址为2222。

二、散列冲突解决方法

在构造散列函数的过程中,不可避免地会出现冲突的情况。所谓处理冲突,就是在有冲突发生时,为产生冲突的关键字找到另一个地址存放该关键字。在解决冲突的过程中,可能会得到一系列散列地址hi(i=1,2,…,n),也就是发生第一冲突时,经过处理后得到第一新地址记作h1,如果h1仍然会冲突,则处理后得到第二个地址h2,依此类推,直到hn不产生冲突,将hn作为关键字的储存地址。

处理冲突的方法比较常用的主要有开放定址法、再散列法和链地址法。

(1)开放定址法

开放定址法是解决冲突比较常用的方法。开放定址法就是利用散列表中的空

地址存储产生冲突的关键字。当冲突发生时,按照下列公式处理冲突:

hi=(h(key)+di)%m,其中i=1,2,…,m-1

其中,h(key)为散列函数,m为散列表长,di为地址增量。地址增量di可以

以下三种方法获得:

①线性探测再散列:当冲突发生时,地址增量di依次取1,2,…,m-1自然数列,

即di=1,2,…,m-1。

②二次探测再散列:在冲突发生时,地址增量di依次取自然数的平方,即di=12,—12,22,—22,…,k2,—k2。

③伪随机数再散列:在冲突发生时,地址增量di依次取随机数序列。

例如,在长度为14的散列表中,在将关键字183,123,230,91存放在散列表中的

情况如图所示。

Hash地址

0 1 2 3 4 5 6 7 8 9 10 11 12 13

18 3

12

3

23

91 散列表冲突发生前示意图

当要插入关键字149时,有散列函数h(149)=149%13=6,而单元6已经存在关

键字,产生冲突,利用线性探测再散列法解决冲突,即h1=(6+1)%14=7,将149

储存在单元7中,如图所示。

Hash地址

0 1 2 3 4 5 6 7 8 9 10 11 12 13

18 3

12

3

14

9

23

91 插入关键字149后的示意图

当要插入关键字227时,由散列函数h(227)=227%13=6,而单元6已经存在关

键字,产生冲突,利用线性探测再散列法解决冲突,即h1=(6+1)%14=7,仍然

冲突,继续利用线性探测法,即h2=(6+2)%14=8,单元8空闲,因此将227存

储在单元8中,如图所示。

Hash地址

0 1 2 3 4 5 6 7 8 9 10 11 12 13

18 3

12

3

14

9

22

7

23

91 插入关键字227后的示意图

当然,在冲突发生时,也可以利用二次探测再散列解决冲突。在图11.33中,如果要插入关键字227,因为产生冲突,利用二次探测再散列法解决冲突,即h1=(6+1)%14=7,再次产生冲突时,有h2=(6—1)%14=5,将227储存在单元5

中,如图所示。

Hash地址

0 1 2 3 4 5 6 7 8 9 10 11 12 13

18 3

22

7

12

3

14

9

23

91 利用二次探测再散列解决冲突示意图

(2)再散列法

再散列法就是在冲突发生时,利用另外一个散列函数再次求散列函数的地址,直到冲突不再发生为止,即

hi=rehash(key),i=1,2…,n

其中,rehash表示不同的散列函数。这种再散列法一般不容易再次发生冲突,但是需要事先构造多个散列函数,这是一件不太容易的也不现实的事情。

(3)链地址法

数组的特点是:寻址容易,插入和删除困难;而链表的特点是:寻址困难,插入和删除容易。那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的,这就是我们要提起的哈希表,哈希表有多种不同的实现方法,我接下来解释的是最常用的一种方法——链地址法,我们可以理解为“链表的数组”,如图:

左边很明显是个数组,数组的每个成员包括一个指针,指向一个链表的头,当然这个链表可能为空,也可能元素很多。我们根据元素的一些特征把元素分配到不同的链表中去,也是根据这些特征,找到正确的链表,再从链表中找出这个元素。

三、哈希法性能分析

由于冲突的存在,哈希法仍需进行关键字比较,因此仍需用平均查找长度来评价哈希法的查找性能。哈希法中影响关键字比较次数的因素有三个:哈希函数、处理冲突的方法以及哈希表的装填因子。哈希表的装填因子α的定义如下:

■线性探测再散列

查找成功时

查找失败时

■伪随机探测再散列、 二次探测

查找成功时

查找失败时

■链址法

查找成功时

查找失败时 从以上讨论可知:哈希表的平均查找长度是装填因子α的函数,而与待散列元素数目n 无关。因此,无论元素数目n 有多大,都能通过调整α,使哈希表的平均查找长度较小。

5. 源代码

??

? ??-+=α111211n S ()???

? ??-+=2111121αn U ()

αα

--=111n S nr α

-=11

1n U 2

1α+

=nc S αα-+=e U nc

/*包含头文件*/

#include

#include

#include

typedef int KeyType;

typedef struct/*元素类型定义*/

{

KeyType key;/*关键字*/

int hi;/*冲突次数*/

}DataType;

typedef struct/*散列表类型定义*/

{

DataType *data;

int tableSize;/*散列表的长度*/

int curSize;/*表中关键字个数*/

}HashTable;

void CreateHashTable(HashTable *H,int m,int p,int hash[],int n);

int SearchHash(HashTable H,KeyType k);

void DisplayHash(HashTable H,int m);

void HashASL(HashTable H,int m);

void DisplayHash(HashTable H,int m)

/*输出散列表*/

{

int i;

printf("散列表地址");

for(i=0;i

printf("%-5d",i);

printf("\n");

printf("关键字key: ");

for(i=0;i

printf("%-5d",H.data[i].key);

printf("\n");

printf("冲突次数: ");

for(i=0;i

printf("%-5d",H.data[i].hi);

printf("\n");

}

void CreateHashTable(HashTable *H,int m,int p,int hash[],int n)

/*构建一个空的散列表,并处理冲突*/

{

int i,sum,addr,di,k=1;

(*H).data=(DataType*)malloc(m*sizeof(DataType));/*散列表分配储存

if(!(*H).data)

exit(-1);

for(i=0;i

{

(*H).data[i].key=-1;

(*H).data[i].hi=0;

}

for(i=0;i

{

sum=0;/*冲突的次数*/

addr=hash[i]%p;/*利用除留余数法求散列函数地址*/

di=addr;

if((*H).data[addr].key==-1)/*如果不冲突则将元素储存在表中*/

{

(*H).data[addr].key=hash[i];

(*H).data[addr].hi=1;

}

else/*用线性探测再散列法处理冲突*/

{

do

{

di=(di+k)%m;

sum+=1;

} while((*H).data[di].key!=-1);

(*H).data[di].key=hash[i];

(*H).data[di].hi=sum+1;

}

}

(*H).curSize=n;/*散列表中关键字个数为n*/

(*H).tableSize=m;/*散列表的长度*/

}

int SearchHash(HashTable H,KeyType k)

/*在散列表H中查找关键字k的元素*/

{

int d,d1,m;

m=H.tableSize;

d=d1=k%m;

while(H.data[d].key!=-1);/*求k的散列地址*/

{

if(H.data[d].key==k)/*如果是要查找的关键字k,则返回k的位置*/ return d;

else

d=(d+1)%m;/*继续往后查找*/

if(d==d1)

return 0;

}

return 0;/*该位置不存在关键字k*/

}

void HashASL(HashTable H,int m)

/*求散列表的平均查找长度*/

{

float average=0;

int i;

for(i=0;i

average=average+H.data[i].hi;

average=average/H.curSize;

printf("平均查找长度ASL=%。2f",average);

printf("\n");

}

void main()

{

int hash[]={23,35,12,56,123,39,342,90};

int m=11,p=11,n=8,pos;

KeyType k;

HashTable H;

CreateHashTable(&H,m,p,hash,n);

DisplayHash(H,m);

k=123;

pos=SearchHash(H,k);

printf("关键字%d在散列表中的位置为:%\n",k,pos);

HashASL(H,m);

}

(2)

#include

#include

#define HashSize 53

#define MaxSize 20

typedef struct

{

int key;

int si;

}HashTable1;

void CreateHashTable1(HashTable1 *H,int *a,int num)//哈希表线性探测在

散列;

{

int i,d,cnt;

for(i=0;i

{

H[i].key=0;

H[i].si=0;

}

for(i=0;i

{

cnt=1;

d=a[i]%HashSize;

if(H[d].key==0)

{

H[d].key=a[i];

H[d].si=cnt;

}

else

{

do

{

d=(d+1)%HashSize;

cnt++;

}while(H[d].key!=0);

H[d].key=a[i];

H[d].si=cnt;

}

}

printf("\n线性再探索哈希表已建成!");

}

void SearchHash1(HashTable1 *h,int data)

{

int d;

d=data%HashSize;

if(h[d].key==data)

printf("数字%d的探查次数为:%d\n",h[d].key,h[d].si); else

{

do

d=(d+1)%HashSize;

while(h[d].key!=data && d

if(d

printf("数字%d的探查次数为:%d\n",h[d].key,h[d].si); else

printf("没有查找到你所输入的数\n");

}

}

typedef struct node

{

int key;

int si;

struct node *next;

}Node;

typedef struct

{

Node *link;

}HashTable2;

void CreateHashTable2(HashTable2 *ht[],int *a,int num)//哈希表链地址;{

int i,d,cnt;

Node *s,*q;

for(i=0;i

{

ht[i]=(HashTable2 *)malloc(sizeof(HashTable2));

ht[i]->link=NULL;

}

for(i=0;i

{

cnt=1;

s=(Node *)malloc(sizeof(Node));

s->key=a[i];s->next=NULL;

d=a[i]%num;

if(ht[d]->link==NULL)

{

ht[d]->link=s;

s->si=cnt;

}

else

{

q=ht[d]->link;

while(q->next!=NULL)

{

q=q->next;cnt++;

}

cnt++;

s->si=cnt;

q->next=s;

}

}

}

void SearchHash2(HashTable2 * h[],int data,int num) {

int d;

Node *q;

d=data%num;

q=h[d]->link;

while(q->key!=data && q->next!=NULL)

q=q->next;

if(q->next!=NULL)

printf("数字%d的查找次数为:%d\n",q->key,q->next); else

printf("没有找到你要查找的那个数\n");

}

typedef struct

{

int * elem[HashSize];

int count;

int size;

}HashTable3;

int Collision(int p,int &c)//二次探测再散列法解决冲突{

int i,q;

i=c/2+1;

while(i

{

if(c%2==0)

{

c++;

q=(p+i*i)%HashSize;

if(q>=0)

return q;

else

i=c/2+1;

}

else

{

q=(p-i*i)%HashSize;

c++;

if(q>=0)return q;

else i=c/2+1;

}

}

return (-1);

}

void CreateHash3(HashTable3 *h,int *a,int num)//二次探索表

{

int i,p=-1,c,pp;

for(i=0;i

{

c=0;

p=a[i]%HashSize;

pp=p;

while(h->elem[pp]!=NULL)

{

pp=Collision(p,c);

if(pp<0)

{

printf("第%d个记录无法解决冲突\n",i+1);

continue;

}

}

h->elem[pp]=&(a[a[i]]);

h->count++;

printf("第%d个记录冲突次数为%d\n",i+1,c);

}

printf("\n建表完成!\n此哈希表容量为%d,当前表内存储的记录个数%d.\n",HashSize,h->count);

}

void SearchHash3(HashTable3 *h,int data)//哈希表二次探索再散列查找{

int c=0,p,pp;

p=data%HashSize;

pp=p;

while((h->elem[pp]!=NULL)&&(*(h->elem[pp])!=data))

pp=Collision(p,c);

if((h->elem[pp]!=NULL)&&(*(h->elem[pp])==data))

printf("\n查找成功!\n查找冲突次数为%d:",c);

else

printf("\n没有查到此数!\n");

}

int num;

void GetIn(int *a)

{

printf("输入添加的个数:");

scanf("%d",&num);

for(int i=0;i

scanf("%d",&a[i]);

printf("数据已经输入完毕!\n");

}

void GetOut(int *a)

{

printf("你所输入的数据:");

for(int i=0;i

printf("%d,",a[i]);

printf("\n输出已完毕!");

}

void main()

{

int data;

HashTable1 hash1[HashSize];

HashTable2 * hash2[HashSize];

HashTable3 * ha;

ha=(HashTable3 *)malloc(sizeof(HashTable3));

for(int i=0;i

ha->elem[i]=NULL;

ha->count=0;

ha->size=HashSize;

int a[MaxSize];

while(1)

{

printf("\n ┏━━━━━━━━━━━━━━━┓ ");

printf("\n ┃ 欢迎使用本系统┃ ");

printf("\n ┏〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓┓"); printf("\n ┃★ ★ ★ ★ ★ ★散列法的实验研究★ ★ ★ ★ ★ ★┃"); printf("\n ┃ 【1】. 添加数据信息【2】数据的输出┃"); printf("\n ┃ 【3】. 建立哈希表(线性再散列) ┃"); printf("\n ┃ 【4】. 建立哈希表(二次探测再散列) ┃"); printf("\n ┃ 【5】. 建立哈希表(链地址法) ┃"); printf("\n ┃ 【6】. 线性再散列法查找┃"); printf("\n ┃ 【7】. 二次探测再散列法查找┃"); printf("\n ┃ 【8】. 链地址法查找┃"); printf("\n ┃ 【0】. 退出程序┃"); printf("\n ┗〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓┛"); printf("\n");

printf("\n");

printf("请输入一个任务选项>>>");

int x;

scanf("%d",&x);

switch(x)

{

case 1:

GetIn (a);break;

case 2:

GetOut(a);break;

case 3:

CreateHashTable1(hash1,a,num);break;

case 4:

CreateHash3(ha,a,num);break;

case 5:

CreateHashTable2(hash2,a,num);break;

case 6:

printf("请输入你查找的数据:");

scanf("%d",&data);

SearchHash1(hash1,data);break;

case 7:

printf("请输入你查找的数据:");

scanf("%d",&data);

SearchHash3(ha,data);break;

case 8:

printf("请输入你查找的数据:");

scanf("%d",&data);

SearchHash2(hash2,data,num);break;

case 0:exit(-1);

}

}

}

6.运行结果及分析

(1)利用除数取余法建立散列表,线性探测再散列解决冲突

(2)利用线性再散列法,二次探查再散列,链地址法解决冲突

1

23

4

5

6

7

7. 收获及体会

散列法对应的表是散列表,是利用散列函数的映射关系直接确定要查找元素的位置,大大减少了与元素的关键字的比较次数。建立散列表的方法主要有直接定址法、平方取中法、折叠法、除留余数法等。其中最常用的是除留余数法。除留余数法通过对关键字取余,将得到的余数作为散列地址,即假设关键字为key,

则利用映射关系h(key)=key%p得到映射地址作为散列地址,其中p是小于等于散列表长m的数。

虽然散列表的出发点是希望不与给定的关键字比较,来确定元素的存放位置,但是不可避免的出现关键字不同即key1=/=key2,而映射关系相同的情形,即h(key1)=h(key2),这种情况被称为冲突。解决冲突最为常用的方法主要有两个:开放定址法和链地址法。其中开放地址法是利用散列表中的空地址存储产生冲突的关键字,解决冲突可以利用地址增量解决,方法有两个:线性探测再散列和二次探测再散列。链地址法是将具有相同散列地址的关键字用一个线性链表存储起来。每个线性链表设置一个头指针指向该链表。在每一个链表中,所有元素都是按关键字有序排序。

8.参考文献

[1] 陈锐《零基础学数据结构》.北京:清华大学出版社,2010.1

[2] 李春葆《数据结构教程(3版)》.北京:清华大学出版社,2009.3

[3] 左飞《C++数据结构原理与经典问题求解》.北京:电子工业出版社,2008.10

数据结构实验 散列表实验报告

课程实验报告 课程名称:数据结构 实验项目名称:散列表 专业班级: 姓名:XXX 学号: 完成时间:2015 年06 月13 日

背景 散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。在理想情况下,查找、插入、删除操作的时间均为O(1),是一种高效的动态集合结构。 例1:计算机程序设计语言的编译程序需要维护一个符号表,其中元素的关键值为任意字符串,与语言中的标识符对应。该符号表常采用散列表。 例2:为了节约空间,常常需要把文本文件采用压缩编码方式存储。LZW是对文本文件进行压缩和解压缩的方法之一,该方法采用了散列。 问题描述 我们希望在浩瀚的图书中,去发现一本书是否存在。我们不知道书的编号,只知道它的书名。(其实这已经不错了...)。通过书名,来查询它是否存在。 为了简化问题,我们假设每本书的书名都是一组小写字母组成,长度不超过100字符。 基本要求 (1)根据输入建立图书名称表,采用散列表实现该表,散列函数选用BKDE 字符串哈希。 (2)数据的输入输出格式: 输入分为两部分 第一部分,第一行是行数n,n <= 5000。余下n行,每行一个字符串。表示已存 在的图书记录。 第二部分,第一行是行数m,m <= 1000。余下m行,每行一个字符串。表示要查 询的图书记录。 输出: 输出为m行,如果被查的记录存在,则输出"YES",如果不存在则输出"NO"。 测试数据 输入: 4 a ans and hellocpp

民事诉讼法学,平时作业2020秋华工答案

1. 试述民事检察监督原则。 答:1、对于民事诉讼中的审判人员的贪赃枉法,徇私舞弊等违法行为,当事人有权进行控告,检举,人民检察院应当履行法律监督的职责。 2、人民检察院对人民法院已经发生法律效力的判决、裁定,如果认为有错误,应当提出抗诉或者检察建议,推动再审程序,纠正既有错误。 3、如果调解书的内容损害了国家利益、社会公共利益,人民检察院也应当通过抗诉或者检察建议等方式,推动对调解书的再审。 2. 试述民事诉讼中的处分原则。 答:1、处分原则,是指民事诉讼当事人有权在法律规定的范围内自主决定行使或者放弃自己享有的诉讼权利和实体权利。(1)处分权的享有者只限于当事人;(2)处分权的内容包括处分诉讼权利和实体权利;(3)处分原则惯穿于诉讼的全过程;(4)处分权的行使必须符合法律规定。 3. 试述民事诉讼中的辩论原则。 答:所谓辩论,指的是当事人双方在法院主持下,就案件事实和运用法律的问题,陈述各自的主张和意见,相互进行反驳和答辩,以争取对自己有利的诉讼结果,维护自己的合法权益;人民法院则通过辩论查明案件事实。辩论原则的具体含义应包括以下几个方面的内容:1、辩论权是当事人的一项重要的诉讼权利。2、辩论原则贯穿于民事诉讼的全过程,包括一审,二审和再审程序。3、辩论的表现形式可以是口头形式,也可以是书面形式。4、辩论的内容既可以是实体方面的问题,也可以是程序方面的问题。5、人民法院在诉松过程中应当中应当保障当事人充公行使辩论权。6、人民法院应当充分保障当事人的辩论权。 4. 民事诉讼中的第三人的类型化分析。 答:1、制度与现行规定,根据国家发布的法律法规,尽可能地将有关第三人的制度规定找全,并对相关制度作必要的说明。2、我国关于无独立请求权第三人的理论研究,重点介绍准独立第三人说及纠纷解决需要说。3、比较法研究,通过对苏联、法、美、德、日相关制度的研究,分析我国第三人类型划分的定位及不同制度之间的差异。4、第三人类型划分的构建,通过比较分析,里清我国无独立请求权第三人类型划分,对建立完善的第三类型划分作出分析。 5. 论形式当事人与实质当事人的关系。 答: 6. 试述证据的合法性。 答:1、证据主体合法。证据主体是指形式证据内容的个人或单位,证据主体合法,是指形式证据的主体须符合法律的要求。主体不合法也将导致证据的不合法。证据主体的法律要求,也是为保障证据的证据的真实性。因此法律根据证据特点,对某些证据的证据主体规定了相应的要求。2、形式合法。证据形式的合法性,是指作为证据不仅要求在内容上是真实的,还要求形式上也符合法律规定的要求。 3、取得方式合法。当事人收集的证据材料能否作为法院认定案件事实的证据,还要看该证据材料的取得方法是否符合法律的规定。法律规定证据取得方法必须合法,是为了保障他人的合法权利不至于因为证据的违法取得而受到侵害。 4、证据程序合法。证据材料最后要作为证据还必须经过一定的诉讼程序,没有经过法律规定的程序该证据仍然不能作为认定案件的根据。这一程序就是证据的质证程序。 7. 试述证明责任分配的一般规则。 答:1、原告、被告、第三人在民事诉讼中都负有证明责任。2、没有提供证据或者所提供证据不足以证明自己主张的当事人,应当承担不利的裁判后果,从而体现出证明责任作为一种风险分担的本质。

迭代法的加速

6.5 迭代法的加速 一、教学目标及基本要求 通过对本节的学习,使学生掌握方程求根迭代法的加速。 二、教学内容及学时分配 本章主要介绍线性方程求根的迭代法的加速方法。要求 1.了解数值分析的研究对象、掌握误差及有关概念。 2.正确理解使用数值方法求方程的解的基本思想、数学原理、算法设计。 3.了解插值是数值逼近的重要方法之一,正确理解每一种算法的基本思想、计算公式、算法设计、程序框图设计和源程序。 4.掌握数值积分的数学原理和程序设计方法。 5.能够使用数值方法解决一阶常微分方程的初值问题。 6.理解和掌握使用数值方法对线性方程组求解的算法设计。 三、教学重点难点 1.教学重点:非线性方程迭代收敛性与迭代加速、牛顿法。 2. 教学难点:迭代的收敛性。 四、教学中应注意的问题 多媒体课堂教学为主。适当提问,加深学生对概念的理解,迭代加速的算法实现。 五、教案正文 6.1 迭代公式的加工 迭代过程收敛缓慢,计算量将很大,需要进行加速。 设k x 是根*x 的某个近似值,用迭代公式校正一次得()k k x x ?=+1,假设) ('x ?

在所考察得范围内变化不大,其估计值为L ,则有: k k k k x L L x L x x x L x x ---≈?-≈-++111)(1**1* 有迭代公式k k k x L L x L x ---=++11111 ,是比1+k x 更好的近似根。这样加工后的计算过程为: 迭代()k k x x ?=+1 改进k k k x L L x L x ---= ++11111 合并的])([111k k k Lx x L x --=+? 例3 P133 6.2 埃特金算法 上述加速方法含有导数()x '?,不便于计算。设将迭代值()k k x x ?=+1再迭代一次,又得() 11~++=k k x x ?,由于)(~1*1*++-≈-k k x x L x x 又)(*1*k k x x L x x -≈-+,消去L 得 k k k k k k k k k k x x x x x x x x x x x x x x x +---≈?--≈--++++++++112 111*1**1*1*2~)~(~~ 计算过程如下: 迭代()k k x x ?=+1 迭代()11~++=k k x x ? 改进k k k k k k k x x x x x x x +---=++++++11211112~)~(~ 小结:这节课我们主要介绍了线性方程组迭代法加速的基本思想及其常用的几种迭代方法。要求大家掌握埃特金算法及其收敛速度,收敛的阶。 作业:课后作业10-13

哈希表实验报告完整版

实验报告 姓名:学号: 1.实验题目 针对某个集体中人名设计一个哈希表,使得平均查找长度不超过R,并完成相应的建表和查表程序。 基本要求:假设人名为中国人姓名的汉语拼音形式。待填入哈希表的人名共有30个,取平均查找长度的上限为2。哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 2.需求分析 本演示程序用VC编写,完成哈希函数用除留余数法构造,用线性探测再散列法或链地址法处理冲突。 输出形式:地址,关键字,收索长度,H(key),拼音 3.概要设计 typedef struct NAME typedef struct hterm void InitNameList() void CreateHashList() void FindList() void Display() int main() 4.详细设计 #include #include #include

#define HASH_LEN 50 #define M 47 #define NAME_NO 8 typedef struct NAME { char *py; //名字的拼音 int k; //拼音所对应的整数}NAME; NAME NameList[HASH_LEN]; typedef struct hterm //哈希表{ char *py; //名字的拼音 int k; //拼音所对应的整数int si; //查找长度 }HASH; HASH HashList[HASH_LEN]; void InitNameList() { NameList[0].py="houxinming"; NameList[1].py="abc"; NameList[2].py="defdgf"; NameList[3].py="zhangrji"; NameList[4].py="jiaxin"; NameList[5].py="xiaokai"; NameList[6].py="liupeng"; NameList[7].py="shenyonghai";

《民事诉讼法》作业参考答案

《民事诉讼法》作业参考答案 一、单项选择题 1B 2A 3A 4B 5C 6A 7B 8C 9C 10B 11A 12A 13A 14A 15B 16A 17A 18B 19D 20D 21C 22D 23A 24A 25A 26B 27C 28D 29D 30A 31C 32C 33B 34C 35C 36D 37D 38C 39A 40C 41C 42D 43A 44C 45B 46D 47B 48D 49A 50A 51C 52A 53B 54B 55A 56D 57C 58B 59C 60D 61C 62B 63C 64A 65C 66C 67C 68D 69D 70D 71D 二、多项选择题 1、ABCD 2、BCDE 3、BCDE 4、ABC 5、ABCD 6、ABCD 7、ACD 8、AB 9、ABCD 10、AB 11、DE 12、CE 三、名词解释题 1.是指民事诉讼法律关系主体在诉讼过程中依法所进行的各种诉讼活动。在大多数情况下,民事诉讼法律关系的发生、变更和消灭是基于诉讼行为引起的。 2.是指对于某些民事案件,人民法院在受理案件后,终审判决做出前,根据一方当事人的申请,裁定另一方当事人预先给付其一定数额的金钱或其他财物,或者实施或停止某种行为,并立即付诸执行的制度。 3.是指法院根据债权人的申请,以支付令催促债务人限期履行债务的程序。 4.指海事法院根据海事请求人的申请,为使其合法权益免受侵害,责令请求人作为或者不作为的强制措施。 5.是指按照一定的标准,划分上下级人民法院之间受理第一审民事案件的分工和权限。级别管辖是在法院系统内部对各级法院的分工和权限所作的纵向划分,它解决的是哪些一审案件应由哪级人民法院管辖的问题。 6.是在法院受理案件之后做出裁判之前,原告向法院表示撤回起诉,要求法院对案件停止审理的行为。 7.是人民法院责令债务人在规定期限履行债务的法律文书。 8.是指在对外经济贸易、运输和海事活动中发生争议,双方当事人根据达成的仲裁协议或仲裁条款,提交我国涉外仲裁机构进行审理和裁决。 9.是指审判人员以及其他有关人员如果与案件存在一定利害关系,即应退出案件审理的制度。 10.是指人民法院在审理案件的过程中,出现某些法定情形使诉讼无法继续进行,而暂时停止诉讼的制度。 11.在执行程序中,债务人或者第三人向人民法院提供担保,请求法院暂缓执行经申请执行人同意,人民法院决定暂时停止执行的一种法律制度,称为执行担保。 四、简答题 1.答:由上级人民法院将案件移送给原来没有管辖权的人民法院,或者下级人民法院将某个案件的管辖权经上级人民法院的同意转移给上级人民法院的,称为管辖权的转移,即移转管辖,移送管辖是指某个人民法院受理案件后,发现自己对该案没有管辖权,将案件移送给有管辖权的人民法院受理。 移转管辖与移送管辖的区别: (1)移转管辖是有管辖权的人民法院将案件移送给原来没有管辖权的人民法院,所转移的是案件的管辖权;而移送管辖是无管辖权的人民法院将不属于自己管辖的案件移送给它认为有管辖权的人民法院,所移送的是案件而不是案件的管辖权。 (2)移转管辖是在上下级人民法院之间进行的,是补充级别管辖的一种规定;而移送管辖除涉及级别管辖的情况外,一般是在同级人民法院之间进行,是落实地域管辖的一种规定。

哈希算法散列

计算机算法领域 基本知识 Hash,一般翻译做“散列”,也有直接音译为”哈希“的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 HASH主要用于信息安全领域中加密算法,他把一些不同长度的信息转化成杂乱的128位的编码里,叫做HASH值. 也可以说,hash就是找到一种数据内容和数据存放地址之间的映射关系 基本概念 * 若结构中存在关键字和K相等的记录,则必定在f(K)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数(Hash function),按这个思想建立的表为散列表。 * 对不同的关键字可能得到同一散列地址,即key1≠key2,而f(key1)=f(key2),这种现象称冲突。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数H(key)和处理冲突的方法将一组关键字映象到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“象” 作为记录在表中的存储位置,这种表便称为散列表,这一映象过程称为散列造表或散列,所得的存储位置称散列地址。 * 若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。 常用的构造散列函数的方法 散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位ǐ 1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=key或H(key) = a?key + b,其中a和b为常数(这种散列函数叫做自身函数) 2. 数字分析法 3. 平方取中法 4. 折叠法 5. 随机数法 6. 除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即H(key) = key MOD p, p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。 处理冲突的方法 1. 开放寻址法;Hi=(H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)为散列函数,m为散列表长,di为增量序列,可有下列三种取法: 1. di=1,2,3,…, m-1,称线性探测再散列; 2. di=1^2, (-1)^2, 2^2,(-2)^2, (3)^2, …, ±(k)^2,(k<=m/2)称二次探测再散列;

年秋民事诉讼法作业

1.第1题 甲、乙二厂因经济合同发生纠纷,甲厂厂长因某种原因不能出庭,便授权该厂办公室主任李某出庭参加诉讼。李某的诉讼身份应是()。 A.原告 B.指定代理人 C.法定代理人 D.委托代理人 您的答案:D 题目分数:2.0 此题得分:2.0 2.第2题 审判人员的回避,由()决定。 A..审判长 B.院长 C.审判委员会 D.当事人 您的答案:A 题目分数:2.0 此题得分:2.0 3.第3题 因合同纠纷提起的诉讼,( )人民法院有管辖权。 A.被告住所地或者合同履行地 B.被告户籍所在地或者合同签订地 C.被告住所地或者合同履行地 D.合同签订地或者合同履行地 您的答案:A 题目分数:2.0 此题得分:2.0

4.第4题 人民法院对保全的申请和先予执行的申请采取措施时,所作出的法律文书是() A.通知书 B.判决 C.裁定 D.决定 您的答案:C 题目分数:2.0 此题得分:2.0 5.第9题 我国民事诉讼中诉讼费用的收取方法是()。 A.财产案件按比例征收,非财产案件按件征收 B.财产案件按比例征收,非财产案件不征收 C.由人民法院决定如何征收 D.均是按件征收 您的答案:B 题目分数:2.0 此题得分:0.0 6.第10题 甲、乙二人发生民事纠纷,一审判决甲胜诉,乙提起上诉,二审法院接到报送的案件之前,甲有转移财产的行为,必须采取财产保全措施。乙即向法院提出了申请。对此,( )。 A.应由第一审人民法院采取财产保全措施 B.应由第二审人民法院采取财产保全措施 C.应由受理申请的人民法院采取财产保全措施 D.应由第一审人民法院报请第二审人民法院采取财产保全措施 您的答案:C

双重散列探查法的计算公式

计算公式: 计算公式是人们在研究自然界物与物之间时发现的一些联系,并通过一定的方式表达出来的一种表达方法。是表征自然界不同事物之数量之间的或等或不等的联系,它确切的反映了事物内部和外部的关系,是我们从一种事物到达另一种事物的依据,使我们更好的理解事物的本质和内涵。 二次再散列法: 散列(Hashing)是计算机科学中一种对资料的处理方法,通过某种特定的函数/算法(称为散列函数/算法)将要检索的项与用来检索的索引(称为散列,或者散列值)关联起来,生成一种便于搜索的数据结构(称为散列表)。二次再散列法是指第一次散列产生哈希地址冲突,为了解决冲突,采用另外的散列函数或者对冲突结果进行处理的方法。 散列表: 设所有可能出现的关键字集合记为U(简称全集)。实际发生(即实际存储)的关键字集合记为K(|K|比|U|小得多)。 散列方法是使用函数h将U映射到表T[0..m-1]的下标上(m=O(|U|))。这样以U中关键字为自变量,以h为函数的运算结果就是相应结点的存储地址。从而达到在O(1)时间内就可完成查找。 其中: ① h:U→{0,1,2,…,m-1} ,通常称h为散列函数(Hash Function)。散列函数h的作用是压缩待处理的下标范围,使待处理

的|U|个值减少到m个值,从而降低空间开销。 ② T为散列表(Hash Table)。 ③ h(Ki)(Ki∈U)是关键字为Ki结点存储地址(亦称散列值或散列地址)。 ④ 将结点按其关键字的散列地址存储到散列表中的过程称为散列(Hashing) 冲突: 两个不同的关键字,由于散列函数值相同,因而被映射到同一表位置上。该现象称为冲突(Collision)或碰撞。发生冲突的两个关键字称为该散列函数的同义词(Synonym)。 安全避免冲突的条件 最理想的解决冲突的方法是安全避免冲突。要做到这一点必须满足两个条件: ①其一是|U|≤m ②其二是选择合适的散列函数。 这只适用于|U|较小,且关键字均事先已知的情况,此时经过精心设计散列函数h有可能完全避免冲突。 冲突不可能完全避免 通常情况下,h是一个压缩映像。虽然|K|≤m,但|U|>m,故无论怎样设计h,也不可能完全避免冲突。因此,只能在设计h时尽可能使冲突最少。同时还需要确定解决冲突的方法,使发生冲突的同义词能够存储到表中。

散列查找顺序表的实现实验报告

题目:顺序表的实现 一、实验题目 顺序表的实现 二、实验目的 ⑴掌握线性表的顺序存储结构; ⑵验证顺序表及其基本操作的实现; ⑶理解算法与程序的关系,能够将顺序表算法转换为对应的程序。 三、实验内容与实现

⑴建立含有若干个元素的顺序表; ⑵对已建立的顺序表实现插入、删除、查找等基本操作。实验实现 #include #include int a[10000]; int arrlong() { int j; for(j=0;j<12;j++) if(a[j]==0) break; return j; } int Insect(int n,int s) ////插入 { int j; for(j=0;j<10000;j++) if(a[j]==0) break; printf("要操作的元素\n"); for(int i=0;in-1;i--) a[i+1]=a[i]; a[n]=s; for(int k=0;k

printf("%d ",a[k]); printf("\n"); } int Search(int p) //查找 { int j,h; for(j=0;j<12;j++) { if(a[j]==0) break; } for(h=0;h

《民事诉讼法学》形成性考核册作业1-4参考答案

《民事诉讼法学》形成性考核册作业1参考答案 一、名词解释 1.民事诉讼:是诉讼的一种,根据诉讼的性质不同,还有刑事诉讼和行政诉讼,统属 于诉讼的范畴。 2.民事诉讼法律关系:是指受民事诉讼法调整的法院、当事人及其他诉讼参与人之间 存在的以诉讼权利和义务为内容的社会关系。 3.既判力:是指生效民事判决所裁判的诉讼标的对双方当事人和法院所具有的强制性 通用力。 4.(民事诉讼的)主管:作为学术概念,一般是指国家机关、社会团体各自的职责和权限范围。 5.期间与期日:期间又称诉讼期间,是指人民法院,当事人和其他诉讼参与人进行诉 讼活动必须遵守的期限。期日,是指人民法院,当事人及其他诉讼参与人会合进行诉 讼行为的日期。 6.财产保全:是指人民法院在利害关系人起诉前或当事人起诉后申请执行前,为保证 将来的判决能够得到顺利执行,而对当事人的财产或争议的标的物,采取限制其处分

的强制措施。 二、问答题 1.处分原则的含义和内容。 答:处分原则,是指当事人在法律规定的范围内,依法自由支配自己享有的民事权利 和诉讼权利的准则。内容:1、当事人有权在法律规定的范围内行使处分权;2、当事 人有权处分自己的民事权利;3、当事人有权处分自己的诉讼权利。 2.回避制度的含义和回避的对象。 答:回避制度,是指承办案件的审判人员及其他有关人员,遇有法律规定的回避情形 时,退出本案审理活动的一种审判制度。回避的对象:审判人员、人民陪审员、书记 员、翻译人员、鉴定人、勘验人 3.根据民事诉讼理论,诉讼管辖的分类。 答:1、法定管辖和裁定管辖;2、专属管辖和协议管辖3、共同管辖和合并管辖 4.诉讼代表人与共同诉讼人的区别。 答:首先,代表人诉讼中,只要推选诉讼代表人,其他共同诉讼人可不必亲自参加诉 讼,而共同诉讼人必须亲自参加诉讼。其次,诉讼代

数据库的存储结构

第五章数据库的存储结构 5.1数据库存储介质的特点 ●内存 容量低(一般只有几百M,最多一两个G),价格高,速度快,数据易丢失(掉电、当机等)。 一般做DBMS(或CPU)和DB之间的数据缓冲区。 实时/内存数据库系统中使用内存存放实时数据。 ●硬盘 容量高(一般有几十G,多到一两百G),价格中,速度较快,数据不易丢失(除非物理性损坏)。 一般做用来存放DB。 实时/内存数据库系统中使用硬盘存放历史数据库。 ●移动硬盘(USB接口) 容量高(一般有几十G),价格中,速度较快,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 ●光盘 容量低(一般650M/片,但光盘可在线更换,海量),价格低,速度中,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 ●磁盘(软盘) 容量低(一般有几M,优盘多到一两百M),价格中,速度较慢,数据不易丢失(除非物理性损坏)。 一般数据库不使用磁盘。 ●磁带 容量低(但可在线更换,海量),价格低,速度最慢,且要按顺序存取,数据不易丢失(除非物理性损坏)。 一般做用来做备份。 按速度从高到低: 内存、硬盘、USB盘(移动硬盘和优盘)、光盘、软盘、磁带。 按在线容量从大到小: 硬盘、移动硬盘、内存、光盘、磁带、优盘、软盘。 物理块:512byte/1K/2K/4K/8K 原因: (1)减少I/O的次数; (2)减少间隙的数目,提高硬盘空间的利用率。 ORACLE逻辑块与物理块(init.ora中db_block_size定义逻辑块大小) 缓冲块和缓冲区(即SGA中的Data Buffer Cache) 延迟写(delayed write)技术/预取(Prefetching)技术(ORACLE中由DBWR进程完成数据的读写)

HASH表

hashing定义了一种将字符组成的字符串转换为固定长度(一般是更短长度)的数值或索引值 的方法,称为散列法,也叫哈希法。由于通过更短的哈希值比用原始值进行数据库搜索更快,这种方法一般用来在数据库中建立索引并进行搜索,同时还用在各种解密算法中。 设所有可能出现的关键字集合记为u(简称全集)。实际发生(即实际存储)的关键字集合记为k(|k|比|u|小得多)。|k|是集合k中元素的个数。 散列方法是使用函数hash将u映射到表t[0..m-1]的下标上(m=o(|u|))。这样以u中关键字为自变量,以h为函数的运算结果就是相应结点的存储地址。从而达到在o(1)时间内就可完成查找。 其中: ①hash:u→{0,1,2,…,m-1} ,通常称h为散列函数(hash function)。散列函数h 的作用是压缩待处理的下标范围,使待处理的|u|个值减少到m个值,从而降低空间开销。 ②t为散列表(hash table)。 ③hash(ki)(ki∈u)是关键字为ki结点存储地址(亦称散列值或散列地址)。 ④将结点按其关键字的散列地址存储到散列表中的过程称为散列(hashing). 比如:有一组数据包括用户名字、电话、住址等,为了快速的检索,我们可以利用名字作为关键码,hash规则就是把名字中每一个字的拼音的第一个字母拿出来,把该字母在26个字母中的顺序值取出来加在一块作为改记录的地址。比如张三,就是z+s=26+19=45。就是把张三存在地址为45处。 但是这样存在一个问题,比如假如有个用户名字叫做:周四,那么计算它的地址时也是z+s=45,这样它与张三就有相同的地址,这就是冲突,也叫作碰撞! 冲突:两个不同的关键字,由于散列函数值相同,因而被映射到同一表位置上。该现象称为冲突(collision)或碰撞。发生冲突的两个关键字称为该散列函数的同义词(synonym)。 冲突基本上不可避免的,除非数据很少,我们只能采取措施尽量避免冲突,或者寻找解决冲突的办法。影响冲突的因素 冲突的频繁程度除了与h相关外,还与表的填满程度相关。 设m和n分别表示表长和表中填人的结点数,则将α=n/m定义为散列表的装填因子(load factor)。α越大,表越满,冲突的机会也越大。通常取α≤1。 散列函数的构造方法: 1、散列函数的选择有两条标准:简单和均匀。 简单指散列函数的计算简单快速; 均匀指对于关键字集合中的任一关键字,散列函数能以等概率将其映射到表空间的任何一个位置上。也就是说,散列函数能将子集k随机均匀地分布在表的地址集{0,1,…,m-1}上,以使冲突最小化。 2、常用散列函数 (1)直接定址法:比如在一个0~100岁的年龄统计表,我们就可以把年龄作为地址。 (2)平方取中法

民事诉讼法作业答案

作业一 1、简述民事纠纷的解决机制。 民事纠纷的解决机制,是指缓解和消除民事纠纷的方法和制度。根据纠纷处理的制度和方法不同,可从以下三种形式来论述民事纠纷的处理机制。 (1)自力救济。 (2)社会救济。 (3)公立救济。 2、简述民事诉讼法律关系主体与诉讼主体的区别。 民事诉讼法律关系主体与诉讼主体的区别:诉讼主体比诉讼法律关系主体的内涵严格,诉讼主体不仅在诉讼程序中享有诉讼权利和承担诉讼义务,而且还必须有权进行使诉讼程序发生、变更或消灭的诉讼行为。 3、简述辩论原则的具体内容 我国民事诉讼法规定的辩论原则包括以下几方面的内容: (1)辩论原则贯穿于民事诉讼的全过程。 (2)辩论的范围包括程序与实体两方面的内容。 (3)辩论可以采取口头和书面两种形式。 (4)人民法院应当保障当事人充分行使辩论权。 4、简述公开审判制度的意义 公开审判制度反映了诉讼公正的一般要求,体现了诉讼民主的价值,其重要意义在于:(1)有利于促进和保障司法公正。 (2)有利于增强司法裁判的公信力。 (3)有利于促使当事人和其他诉讼参与人正确行使诉讼权利,履行诉讼义务。 (4)有利于进行法制宣传教育。 5、简述反诉的成立条件 由于反诉是一个诉,所以提起反诉首先必须具备起诉条件。由于反诉和本诉在同一个诉

讼程序合并审理,所以反诉还得具备诉的客观合并要求。由于反诉与本诉是一种特殊的合并,所以反诉还须具备其他特殊要件,主要有: (1)通常情况下,反诉是本诉被告对本诉原告提起的。 (2)在举证期限届满前(即法庭开庭审理前)提起反诉(《证据规定》第34条)。 (3)反诉与本诉必须适用相同的诉讼程序。 (4)反诉与本诉在诉讼标的、诉讼请求或案件事实方面存在着法律上的牵连关系。 (5)反诉的管辖应当合法。 6、请简述移送管辖的条件。 移送管辖必须同时具备以下三个条件: (1)人民法院已经审理了案件。 (2)受理该案的人民法院对本案无管辖权。 (3)受移送的人民法院享有该案管辖权。 7、试述我国的专属管辖。 专属管辖,是指法律规定某些特殊类型的案件专门由特定的人民法院管辖。 根据《民诉法规定》,适用专属管辖的案件有以下三种: (1)不动产纠纷; (2)港口作业纠纷; (3)继承纠纷。 此外,根据《民诉法》第244条的规定,在中华人民共和国履行的中外合资经营企业合同、中外合作经营企业合同、中外合作勘探开发自然资源合同发生纠纷提起的诉讼,由中华人民共和国人民法院专属管辖。 8、试述提出管辖权异议的条件。 当事人提出管辖权异议,必须符合以下条件: (1)提出管辖权异议的主体必须是本案的当事人。 (2)管辖权异议的客体是第一审民事案件的管辖权。 (3)提出管辖权异议的时间须在提交答辩状期间。

数据结构中常用的逻辑结构和存储结构

数据结构中常用的逻辑结构和存储结构 一、概念 数据是指由有限的符号(比如,"0"和"1",具有其自己的结构、操作、和相应的语义)组成的元素的集合。结构是元素之间的关系的集合。 数据结构是在整个计算机科学与技术领域上广泛被使用的术语。数据结构是信息的一种组织方式,其目的是为了提高算法的效率,它通常与一组算法的集合相对应,通过这组算法集合可以对数据结构中的数据进行某种操作。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。 数据结构有逻辑上的数据结构和物理上的数据结构之分。逻辑上的数据结构反映成分数据之间的逻辑关系即逻辑结构,而物理上的数据结构反映成分数据在计算机内部的存储安排即存储结构。数据结构是数据存在的形式。 数据结构作为一门学科主要研究数据的各种逻辑结构和存储结构,以及对数据的各种操作。因此,主要有三个方面的内容:数据的逻辑结构;数据的物理存储结构;对数据的操作(或算法)。通常,算法的设计取决于数据的逻辑结构,算法的实现取决于数据的物理存储结构。因而研究数据结构的逻辑结构与存储结构显得十分重要。 二、结构分析 (一)逻辑结构 数据的逻辑结构是对数据之间关系的描述,有时就把逻辑结构简称为数据结构。逻辑结构形式地定义为(K,R)(或(D,S)),其中,K是数据元素的有限集,R是K上的关系的有限集。 逻辑结构元素决定输入、存储、发送、处理和信息传递的基本操作功能,常将逻辑结构元素称为逻辑模块。逻辑结构元素可以是计算机操作系统、终端模块、通信程序模块等。逻辑结构元素还可以是相关的几个逻辑模块联合起来的更复杂的实体。分析逻辑结构元素的相互作用,应考虑整个系统的操作,研究处理与信息流有关的进程(操作系统中的一个概念,表示程序的一次执行),并决定系统的逻辑资源。 逻辑结构有四种基本类型:集合结构、线性结构、树状结构和网络结构。表和树是最常用的两种高效数据结构,许多高效的算法能够用这两种数据结构来设计实现。 一、基本分类 数据的逻辑结构指数据元素之间的逻辑关系,分两种,线性结构和非线性结构。 线性结构:有且只有一个开始结点和一个终端结点,并且所有结点都最多只有一个直接前驱和一个直接后继。)线性表就是一个典型的线性结构它有四个基本特征:1.集合中必存在唯一的一个"第一个元素"; 2.集合中必存在唯一的一个"最后的元素"; 3.除最后元素之外,其它数据元素均有唯一的"后继"; 4.除第一元素之外,其它数据元素均有唯一的"前驱"。 相对应于线性结构,非线性结构的逻辑特征是一个结点元素可能对应多个直接前驱和多个直接后继。常见的非线性结构有:树(二叉树等),图(网等)。 二、常用结构

线性方程组的迭代法及程序实现

线性方程组的迭代法及程序实现 学校代码:11517 学号:200810111217 HENAN INSTITUTE OF ENGINEERING 毕业论文 题目线性方程组的迭代法及程序实现 学生姓名 专业班级 学号 系 (部)数理科学系 指导教师职称 完成时间 2012年5月20日河南工程学院 毕业设计(论文)任务书 题目:线性方程组的迭代法及程序实现专业:信息与计算科学学号 : 姓名一、主要内容: 通过本课题的研究,学会如何运用有限元方法来解决线性代数方程组问题,特别是Gaussie-Seidel迭代法和Jacobi迭代法来求解线性方程组。进一步学会迭代方法的数学思想,并对程序代码进行解析与改进,这对于我们以后学习和研究实际问题具有重要的意义。本课题运用所学的数学专业知识来研究,有助于我们进一步掌握大学数学方面的知识,特别是迭代方法。通过这个课题的研究,我进一步掌握了迭代方法的思想,以及程序的解析与改进,对于今后类似实际问题的解决具有重要的意义。

二、基本要求: 学会编写规范论文,独立自主完成。 运用所学知识发现问题并分析、解决。 3.通过对相关资料的收集、整理,最终形成一篇具有自己观点的学术论文,以期能对线性方程组迭代法的研究发展有一定的实践指导意义。 4.在毕业论文工作中强化英语、计算机应用能力。 完成期限: 2012年月指导教师签名:专业负责人签名: 年月日 目录 中文摘要....................................................................................Ⅰ英文摘要 (Ⅱ) 1 综述 1 2 经典迭代法概述 3 2.1 Jacobi迭代法 3 2.2 Gauss?Seidel迭代法 4 2.3 SOR(successive over relaxation)迭代法 4 2.4 SSOR迭代法 5 2.5 收敛性分析5 2. 6 数值试验 6 3 matlab实现的两个例题8 3.1 例1 迭代法的收敛速度8 3.2 例 2 SOR迭代法松弛因子的选取 12致谢16参考文献17附录19

哈希查找_数据结构实验报告

南昌航空大学实验报告 课程名称:数据结构实验名称:实验九查找 班级:学生姓名:学号: 指导教师评定:签名: 题目:编程实现哈希表的造表和查找算法。 要求:用除留余数法构造哈希函数,用二次探测再散列解决冲突。 一、需求分析 1.用户可以根据自己的需求输入一个顺序表(哈希表) 2.通过用除留余数法构造哈希函数,并用开放地址的二次探测再散列解决冲突。 3.在经过排序后显示该哈希表。 4.程序执行的命令包括: (1)创建哈希表(2)输出哈希表(3)二次探测再散列解决冲突 二、概要设计 ⒈为实现上述算法,需要顺序表的抽象数据类型: ADT Hash { 数据对象D:D是具有相同特征的数据元素的集合。各数据元素均含有类型相同,可唯一标识数据元素的关键字。 数据关系R:数据元素同属一个集合。 基本操作P: Creathash(&h) 操作结果:构造一个具有n个数据元素的哈希查找表h。 destroyhash(&h) 初始条件:哈希查找表h存在。 操作结果:销毁哈希查找表h。 displayhash(h) 初始条件:哈希查找表h存在。 操作结果:显示哈希查找表h。 hash(h,&k) 初始条件:哈希查找表h存在。 操作结果:通过除留余数法得到地址用k返回。 hash2 (i,&k) 初始条件:哈希查找表h存在存在,i是除留余数法得到的地址。 操作结果:返回二次探测再散列解决冲突得到的地址k。 search (h,key) 初始条件:哈希查找表h存在。 操作结果:查找表h中的key,若查找成功,返回其地址,否则返回

-1 insert (&h,key) 初始条件:哈希查找表h存在。 操作结果:若表h中没有key,则在h中插入key。 search1(h, key,&p) 初始条件:哈希查找表h存在。 操作结果:在表h中查找key,若没有,则返回p的插入的地址,否 则返回-1。 }ADT Hash 2. 本程序有三个模块: ⑴主程序模块 main(){ 初始化; { 接受命令; 显示结果; } } ⑵创建hash表的模块:主要建立一个哈希表; ⑶解决冲突模块:利用开放地址的二次探测再散列解决冲突; (4)输出哈希表模块:显示已创建哈希表。 三、详细设计 ⒈元素类型,结点类型 typedef struct { int key; }keytype; typedef struct { keytype elem[100]; int length; /*当前的长度*/ int size; /*哈希表的总长*/ }hashtable; /*全局变量*/ int a=0,b=0; /*哈希函数*/ 2.对抽象数据类型中的部分基本操作的伪码算法如下: /*哈希函数*/ int hash(hashtable *h,int k) { return k%h->size; }

四种基本的存储结构

四种基本的存储结构 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT

数据的四种基本存储方法 数据的存储结构可用以下四种基本存储方法得到: (1)顺序存储方法 该方法把逻辑上相邻的结点存储在物理位置上相邻的存储单元里,结点间的逻辑关系由存储单元的邻接关系来体现。 由此得到的存储表示称为顺序存储结构(Sequential Storage Structure),通常借助程序语言的数组描述。 该方法主要应用于线性的数据结构。非线性的数据结构也可通过某种线性化的方法实现顺序存储。 (2)链接存储方法 该方法不要求逻辑上相邻的结点在物理位置上亦相邻,结点间的逻辑关系由附加的指针字段表示。由此得到的存储表示称为链式存储结构(Linked Storage Structure),通常借助于程序语言的指针类型描述。 (3)索引存储方法 该方法通常在储存结点信息的同时,还建立附加的索引表。

索引表由若干索引项组成。若每个结点在索引表中都有一个索引项,则该索引表称之为稠密索引(Dense Index)。若一组结点在索引表中只对应一个索引项,则该索引表称为稀疏索引(Spare Index)。索引项的一般形式是: (关键字、地址) 关键字是能唯一标识一个结点的那些数据项。稠密索引中索引项的地址指示结点所在的存储位置;稀疏索引中索引项的地址指示一组结点的起始存储位置。 (4)散列存储方法 该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。 四种基本存储方法,既可单独使用,也可组合起来对数据结构进行存储映像。 同一逻辑结构采用不同的存储方法,可以得到不同的存储结构。选择何种存储结构来表示相应的逻辑结构,视具体要求而定,主要考虑运算方便及算法的时空要求。 数据结构三方面的关系

基于散列表的电话号码查询系统 完整版

#include //cout,cin语句的头文件 #include //清屏函数头文件:使用csl时调用system #include //字符串头文件 #include #include #define MAXSIZE 100 //电话薄记录的数量 #define MAX_SIZE 50 //用户名、电话号码、地址的最大长度 #define HASHSIZE 400 //定义表长 #define SUCCESS 1 //查找 #define UNSUCCESS -1 #define LEN sizeof(HashTable) // 哈希表的长度 using namespace std; typedef int Status;//typedef用来定义类型的别名。此处用status作为int别名,目的表达int 变量是一个状态变量。 typedef char NA[MAX_SIZE]; //NA作为char的别名 typedef struct{ // 自定义一个记录用户名、电话号码、联系地址的结构体的别名record NA name,tel,add,way; }Record; Record a[HASHSIZE]; typedef struct{ //散列表 Record *elem[HASHSIZE]; //数据元素存储地址 int count; //数据元素个数 int size; //容量 }HashTable; Status eq(NA x,NA y) { //关键字比较,相等返回SUCCESS;否则返回UNSUCCESS if(strcmp(x,y)==0)//2个字符串的大小比较s1=s2,strcmp(s1,s2) == 0; s1>s2, strcmp(s1,s2) == 1; s1>NUM_BER; int i;

相关文档
相关文档 最新文档