一个简单的跨库事务问题

什么是数据结构?

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。

还有一些概念(数据、数据元素、数据项、数据对象、数据类型...)

传统上,我们把数据结构分为逻辑结构和物理结构。

逻辑结构:是指数据对象中数据元素之间的相互关系,也是我们今后最需要关注和讨论的问题。

物理结构:是指数据的逻辑结构在计算机中的存储形式。

逻辑结构分为以下四种:

1.集合:集合结构中的数据元素除了同属于一个集合外,之间没有任何关系。

2.线性结构:元素之间一对一。

3.树形结构:一对多。

4.图形结构:多对多。

物理结构分为以下两种:

1.顺序存储结构:数据元素存放在地址连续的存储单元里,其数据间的逻辑关系与物理关系一致。

2.链式存储结构:数据元素放在任意的存储单元里,可以连续也可以不连续。

谈谈算法

程序=数据结构+算法

算法的五个基本特征:输入、输出、有穷性、确定性和可行性。

<1>算法具有零个或多个输入。

<2>算法至少有一个或多个输出。

<3>指算法在执行有限的步骤之后,自动结束而不会出现无限循环,并且每一个步骤在可接受的时间内完成。

<4>算法的每一个步骤都具有确定的含义,不会出现二义性。

<5>算法的每一步都必须是可行的,也就是说,每一步都能够通过执行有限次数完成

设计要求:

<1>正确性

<2>可读性

<3>健壮性

<4>时间效率高

<5>存储量低。

因此在度量过程中产生了两个复杂度,分别为时间复杂度空间复杂度

时间复杂度

算法时间复杂度的定义:在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化情况并确定T(n)的数量级。

算法的时间复杂度,也就是算法的时间量度,记作:T(n)= O(f(n))。

它表示随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称为时间复杂度。其中f(n)是问题规模n的某个函数。

一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法。

计算方法:

<1>用常数1取代运行时间中的所有加法常数。

<2>在修改后的运行次数函数中,只保留最高阶项。

<3>如果最高阶项存在且不是1,则去除与这个项相乘的常数,得到的最后结果就是大O阶。

举例:

(1)

int a = 1;

int b = 2;

int c = 3;

纯加法常数 执行时间为1+1+1 所以时间复杂度记为O(1)

(2)

int i , n = 100, sum = 0;
     for( i=0; i < n; i++ )
{
     sum = sum + i;
} 

执行时间为 O(1) + O(n) //for会循环执行n次所以时间复杂度为O(n)

(3)

int i, j, n = 100;

for( i=0; i < n; i++ )
{
    for( j=0; j < n; j++ )
    {
        printf(“I love FishC.comn”);
    }
} 

外层执行O(n)次,内层执行O(n)因为时间复杂度为O(n^2)

(4)

int i, j, n = 100;

for( i=0; i < n; i++ )
{
    for( j=i; j < n; j++ )
    {
        printf(“I love FishC.comn”);
    }
} 

由于当i=0时,内循环执行了n次,当i=1时,内循环则执行n-1次……

当i=n-1时,内循环执行1次,所以总的执行次数应该是:n+(n-1)+(n-2)+…+1 = n(n+1)/2

取最高次幂所以时间复杂度为O(n^2)

(5)

int i = 1, n = 100;

while( i < n )
{
    i = i * 2;
}

由于每次i*2之后,就举例n更近一步,假设有x个2相乘后大于或等于n,则会退出循环。

于是由2^x = n得到x = log(2)n,所以这个循环的时间复杂度为O(logn)。

最坏情况与平均情况

我们查找一个有n个随机数字数组中的某个数字,最好的情况是第一个数字就是,

那么算法的时间复杂度为O(1),但也有可能这个数字就在最后一个位置,那么时间复杂度为O(n)。

平均运行时间是期望的运行时间,最坏运行时间是一种保证。

在应用中,这是一种最重要的需求,通常除非特别指定,我们提到的运行时间都是最坏情况的运行时间。

空间复杂度

算法的空间复杂度通知计算方法所需的存储空间实现,算法的空间复杂度的计算公式记作:S(n)=O(f(n))其中,n为问题的规模,f(n)为语句关于n所占存储空间的函数。

参考<<大话数据结构>>

一个简单的跨库事务问题,布布扣,bubuko.com

时间: 2024-10-27 00:08:05

一个简单的跨库事务问题的相关文章

跨库事务一致性问题的解决方案(例)

我们看一个跨库事务一致性的问题,这是一个简单的场景:有新老两个系统,对应新老两套数据库,新数据库采用分库分表的设计,考虑到项目发布之后可能存在风险,采取了新老系统的并行方案.这个系统的业务比较简单:接收来自外部的数据,然后对数据进行核对处理.为了保证新老系统能够并行,在接收数据的时候必须实现双写方案,从而导致了跨库事务的一致性问题. 下面一幅图展示这一简单的场景 这里面会存在一个小问题,就是可能存在写入老库成功,但是写入新库失败的场景. 我们假设出现这种概率的情况是百万分之一,在系统发布的情况下

C 封装一个通用链表 和 一个简单字符串开发库

引言 这里需要分享的是一个 简单字符串库和 链表的基库,代码也许用到特定技巧.有时候回想一下, 如果我读书的时候有人告诉我这些关于C开发的积淀, 那么会走的多直啊.刚参加工作的时候做桌面开发, 服务是C++写,界面是C#写.那时候刚进去评级我是中级,因为他问我关于系统锁和信号量都答出来.开发一段 时间,写C#也写的很溜.后面招我那个人让我转行就写C++和php,那时候就开始学习C++有关知识. 后面去四川工作了,开发安卓,用eclipse + java语法 + android jdk,开发前端,

C 封装一个简单二叉树基库

引文 今天分享一个喜欢佩服的伟人,应该算人类文明极大突破者.收藏过一张纸币类型如下 那我们继续科普一段关于他的简介 '高斯有些孤傲,但令人惊奇的是,他春风得意地度过了中产阶级的一生,而  没有遭受到冷酷现实的打击:这种打击常无情地加诸于每个脱离现实环境生活的  人.或许高斯讲求实效和追求完美的性格,有助于让他抓住生活中的简单现实.  高斯22岁获博士学位,25岁当选圣彼德堡科学院外籍院士,30岁任哥廷根大学数  学教授兼天文台台长.虽说高斯不喜欢浮华荣耀,但在他成名后的五十年间,这  些东西就像

利用Hessian10分钟配置出一个简单的跨Web服务消息推送

笔者,之前对Web跨服务推送数据一无所知,今天研究了一下.其实有些事物,在不理解的时候完全觉得好似天外来物.但了解一点点之后,又会觉得十分有趣.每天闲扯一下很开心,下面一个简单的实例10分钟配置出跨Web服务的消息推送.一.被调用端web.xml配置 <!--HelloHessian --> <servlet> <servlet-name>HelloHessian</servlet-name> <servlet-class>com.caucho.

C 构造一个 简单配置文件读取库

前言 最近看到这篇文章, json引擎性能对比报告 http://www.oschina.net/news/61942/cpp-json-compare?utm_source=tuicool 感觉技术真是坑好多, 显露的高山也很多. 自己原先也 对着 json 标准定义http://www.json.org/json-zh.html 写过一般json解析器, 1000行后面跟上面一对比, 真是弱鸡. 后面就看了其中吹得特别掉几个源码,确实有过人之处,深感 自己不足. 下载一些也在研究,发现看懂会

一个简单的存储过程使用事务的例子

在存储过程中使用事务时非常重要,使用数据库可以保持数据的关联完整性,在SQL Server存储过程中使用事务也很简单,举个例子: Create Procedure MyProcedure ( @Param1 nvarchar(10), @Param2 nvarchar(10) ) AS Begin Set NOCUNT ON; Set XACT_ABORT on; Begin Tran Delete from table1 where name='abc'; insert into table2

一个简单的跨域问题

在业务中有需要到跨域的地方,然后简单的学习了一下利用jsonp解决跨域问题: 首先是跨域的原理:因为浏览器的限制,限制不能跨域ajax请求. 方式:首先在客户端注册一个callback, 然后把callback的名字传给服务器.此时,服务器先生成 json 数据.然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回

跨库事务

Unless MS DTC is currently installed on the computer running the instance of the Database Engine, this example produces an error message. For more information about installing MS DTC, see the Microsoft Distributed Transaction Coordinator documentatio

isMobile 一个简单的JS库,用来检测移动设备

github地址: https://github.com/kaimallea/isMobile 示例 (function () { var MOBILE_SITE = 'http://m.xx.com/index.html', NO_REDIRECT = 'noredirect'; if (isMobile.any) { if ( document.cookie.indexOf(NO_REDIRECT) === -1 ) { document.location = MOBILE_SITE; }