博文

理解约瑟夫环,学会用到链表(2013-03-28 10:28:00)

摘要:以下是本人的一些分享,我热爱编程,希望能多交编程的爱好者,如果你也是其中一名,那么请加好友,大家关注一下,下面的文章是自己觉得一些有用的东西,留下来给自己当笔记,当然也希望能帮助到你,首先感谢你的阅读~!
据说著名犹太历史学家 Josephus有过以下的故事:他参与并记录了公元66-70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住邱达伯特城,在坚持了47天之后,城市失守,沦陷后,他和40名英勇的将士退到附近一个洞穴躲藏起来。大家都表决说宁死不降,于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由大家排成一个圈,报数决定的,他有预谋地把自己安排在最后一个报数的位置,并且,作为洞穴中的两个幸存者之一,他说服了他原先的牺牲品一起投降了罗马。

通常我们解决这个问题的时候,都会用到链表, 解决问题的核心步骤如下:(程序的基本算法)

1.建立一个具有n个链结点,无头结点的循环链表;

2.确定第1个报数人的位置;

3.不断地从链表中删除链结点,直到链表为空。

但是一个初学者如何去解决这个问题呢?

我们可以用的方法也很多,比如说:

1,用数组标记法,先初始化为0,然后每个自杀的人的数值改为1,循环遍历判断到最后一个被标记完为止;

2,用数组记录所有的人,然后每个报到相应数字的打印出来,然后删除掉,后面的往前移动,循环到剩下最后一个为止;

 或者用递归,递推等等,在这里,我简单介绍一下上面第二个方法,以便初学者容易理解这个打印的过程。

#include <stdio.h>

#include <stdlib.h>

int main(void)

{

int k = -1;

int m = 0;

int n = 0;

print......

阅读全文(2188) | 评论:0

Oracle数据库重装恢复数据解决(2012-12-26 11:33:00)

摘要: Oracle重装恢复数据解决


原因:


开发用的Oracle数据库出问题了


各种问题,调来调去搞不定。重装,但是想保留数据文件。


解决方法:


1.备份原来oradata文件夹,包括数据文件,控制文件,redo log文件,备份为oradata_bak


2.卸载原来的数据库


3.安装新数据库,注意数据库的参数要与原来安装的一样,如Oracle sid,数据文件存放位置等。要不然要改很多配置


4.关闭数据库,执行shutdown命令


5.把oradata_bak下的文件拷贝到新的oradata文件夹下


6.startup即可


注意:em想要访问的话需要重启em服务
......

阅读全文(1688) | 评论:0

SQL Server数据库中交易日志怎么维护?(2012-12-06 11:21:00)

摘要: 交易日志(Transaction logs)是数据库结构中非常重要但又经常被忽略的部分。由于它并不像数据库中的schema那样活跃,因此很少有人关注交易日志。


交易日志是针对数据库改变所做的记录,它可以记录针对数据库的任何操作,并将记录结果保存在独立的文件中。对于任何每一个交易过程,交易日志都有非常全面的记录,根据这些记录可以将数据文件恢复成交易前的状态。从交易动作开始,交易日志就处于记录状态,交易过程中对数据库的任何操作都在记录范围,直到用户点击提交或后退后才结束记录。每个数据库都拥有至少一个交易日志以及一个数据文件。


出于性能上的考虑,SQL Server将用户的改动存入缓存中,这些改变会立即写入交易日志,但不会立即写入数据文件。交易日志会通过一个标记点来确定某个交易是否已将缓存中的数据写入数据文件。当SQL Server重启后,它会查看日志中最新的标记点,并将这个标记点后面的交易记录抹去,因为这些交易记录并没有真正的将缓存中的数据写入数据文件。这可以防止那些中断的交易修改数据文件。


维护交易日志


因为很多人经常遗忘交易日志,因此它也会给系统带来一些问题。随着系统的不断运行,日志记录的内容会越来越多,日志文件的体积也会越来越大,最终导致可用磁盘空间不足。除非日常工作中经常对日志进行清理,否则日志文件最终会侵占分区内的全部可用空间。日志的默认配置为不限容量,如果以这种配置工作,它就会不断膨胀,最终也会占据全部可用空间。这两种情况都会导致数据库停止工作。


对交易日志的日常备份工作可以有效的防止日志文件过分消耗磁盘空间。备份过程会将日志中不再需要的部分截除。截除的方法是首先把旧记录标记为非活动状态,然后将新日志覆盖到旧日志的位置上,这样就可以防止交易日志的体积不断膨胀。如果无法对日志进行经常性的备份工作,最好将数据库设置为"简单恢复模式"。在这种模式下,系统会强制交易日志在每次记录标记点时,自动进行截除操作,以新日志覆盖旧日志。


截除过程发生在备份或将旧标记点标为非活动状态时,它使得......

阅读全文(1854) | 评论:0