数据结构处算法分析――读书笔记

数据结构处算法分析――读书笔记
数据结构处算法分析――读书笔记

数据结构处算法分析――读书笔记

第一章

前言

1.1 所选教材

我所选择的教材是《数据结构与算法分析——C语言描述》(原书第2版),英文版的名称是《Data Structures and Algorithm Analysis in C》,作者是:(美)Mark Allen Weiss。原书曾被评为20世纪顶尖的30部计算机著作之一。之所以选这本书,还因为它的简体中文版翻译得相当不错,几乎没有给我的阅读带来什么障碍。^_^

这本教科书所使用的是C语言,也许很多人会说C语言已经过时了,但是,我认为在数据结构的学习中,应该用尽量简单的语言,以免进入了语言的细枝末节中,反而冲淡了主题。实际上在国外的许多大学中(甚至中学),数据结构和算法分析的课程是选用Scheme的,例如MIT麻省理工大学极其著名的SICP课程。呵呵,语言又能说明什么呢?

1.2 写作原因

数据结构与算法分析是计算机专业的必修课——但遗憾的是,我在大学阶段并不是计算机专业的学生,以至于没有系统地跟着老师学习过这门课程。现在我已经工作了,在实际的工作中,我经常感到自己的基础知识不够,有很多问题无法解决。在经历了一段痛苦的斗争后,我选择了自学的道路,想把这门课程扎扎实实地学好。

教科书中已经给出了大部分的代码,因此,我基本上也只是重复敲入了一次而已(或者是改写成C++),但这并不是没有意义的。我们在看书的时候经常会觉得自己已经懂了,但如果真的要亲自动手去做了,却会感到无法下手。我认为,亲自输入一次代码并调试通过,比任何空谈都有效。

在具体的代码实现上,我可能会参考MFC、STL……但也可能会进行一定的修改。

1.3 一些约定

我使用的是Visual C++ 6.0编译器,并将会用C/C++来撰写代码(我可能会用C++改写原书中的例子,以便能用在工作中,但一些地方还是会用C),不会使用任何与平台相关的特性(因此可以保证有比较好的移植性)。原书中的代码风格跟我平时的代码风格非常相近,但有一些地方我可能会进行一些改动。

我认为数据结构的代码不需要任何界面,因此,请您新建一个工程,类型为Win32 Console Application,即控制台工程。然后添加一个.h头文件和一个.c/.cpp文件。头文件中,我一般会写3行固定格式的预编译语句,如下:

#ifndef __LIST_H__

#define __LIST_H__

// TODO: Add header body code here

#endif // __LIST_H__

表示这是一个list.h。

另外,C++操作符new的实现在不同的编译器中都不太一样,在VC6中,如果new失败,则会返回NULL,程序中我用检测返回值是否为NULL来判断new是否成功,但如果这个代码是用别的编译器编译的,则要特别注意别的编译器是否也是用NULL来表示new失败的,否则很可能会导致无法意料的结果。

为了方便调试内存泄漏,我会在一些地方写入这样的代码:

#include

#include

#ifdef _DEBUG

#define DEBUG_NEW new (_NORMAL_BLOCK, THIS_FILE, __LINE__)

#endif

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#ifdef _DEBUG

#ifndef ASSERT

#define ASSERT assert

#endif

#else // not _DEBUG

#ifndef ASSERT

#define ASSERT

#endif

#endif // _DEBUG

以及:

#ifdef _DEBUG

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif

在阅读时不用管它们,直接略过即可。

第二章

单链表

链表是最常用、最简单和最基本的数据结构之一。我们先来看看单链表的实现。

2.1 代码实现

单链表的实现如下:

///////////////////////////////////////////////////////////////////////////////

//

// FileName : slist.h

// Version : 0.10

// Author : Luo Cong

// Date : 2004-12-29 9:58:38

// Comment :

//

///////////////////////////////////////////////////////////////////////////////

#ifndef __SINGLE_LIST_H__

#define __SINGLE_LIST_H__

#include

#include

#ifdef _DEBUG

#define DEBUG_NEW new (_NORMAL_BLOCK, THIS_FILE, __LINE__) #endif

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#ifdef _DEBUG

#ifndef ASSERT

#define ASSERT assert

#endif

#else // not _DEBUG

#ifndef ASSERT

#define ASSERT

#endif

#endif // _DEBUG

template

class CNode

{

public:

T data;

CNode *next;

CNode() : data(T()), next(NULL) {}

CNode(const T &initdata) : data(initdata), next(NULL) {}

CNode(const T &initdata, CNode *p) : data(initdata), next(p) {} };

template

class CSList

{

protected:

int m_nCount;

CNode *m_pNodeHead;

public:

CSList();

CSList(const T &initdata);

~CSList();

public:

int IsEmpty() const;

int GetCount() const;

int InsertBefore(const int pos, const T data);

int InsertAfter(const int pos, const T data);

int AddHead(const T data);

int AddTail(const T data);

void RemoveAt(const int pos);

void RemoveHead();

void RemoveTail();

void RemoveAll();

T& GetTail();

T GetTail() const;

T& GetHead();

T GetHead() const;

T& GetAt(const int pos);

T GetAt(const int pos) const;

void SetAt(const int pos, T data);

int Find(const T data) const;

};

template

inline CSList::CSList() : m_nCount(0), m_pNodeHead(NULL)

{

}

template

inline CSList::CSList(const T &initdata) : m_nCount(0), m_pNodeHead(NULL) {

AddHead(initdata);

}

template

inline CSList::~CSList()

{

RemoveAll();

}

template

inline int CSList::IsEmpty() const

{

return 0 == m_nCount;

}

template

inline int CSList::AddHead(const T data)

{

CNode *pNewNode;

pNewNode = new CNode;

if (NULL == pNewNode)

return 0;

pNewNode->data = data;

pNewNode->next = m_pNodeHead;

m_pNodeHead = pNewNode;

++m_nCount;

return 1;

}

template

inline int CSList::AddTail(const T data)

{

return InsertAfter(GetCount(), data);

}

// if success, return the position of the new node.

// if fail, return 0.

template

inline int CSList::InsertBefore(const int pos, const T data) {

int i;

int nRetPos;

CNode *pTmpNode1;

CNode *pTmpNode2;

CNode *pNewNode;

pNewNode = new CNode;

if (NULL == pNewNode)

{

nRetPos = 0;

goto Exit0;

}

pNewNode->data = data;

// if the list is empty, replace the head node with the new node.

if (NULL == m_pNodeHead)

{

pNewNode->next = NULL;

m_pNodeHead = pNewNode;

nRetPos = 1;

goto Exit1;

}

// is pos range valid?

ASSERT(1 <= pos && pos <= m_nCount);

// insert before head node?

if (1 == pos)

{

pNewNode->next = m_pNodeHead;

m_pNodeHead = pNewNode;

nRetPos = 1;

goto Exit1;

}

// if the list is not empty and is not inserted before head node, // seek to the pos of the list and insert the new node before it.

pTmpNode1 = m_pNodeHead;

for (i = 1; i < pos; ++i)

{

pTmpNode2 = pTmpNode1;

pTmpNode1 = pTmpNode1->next;

}

pNewNode->next = pTmpNode1;

pTmpNode2->next = pNewNode;

nRetPos = pos;

Exit1:

++m_nCount;

Exit0:

return nRetPos;

}

// if success, return the position of the new node.

// if fail, return 0.

template

inline int CSList::InsertAfter(const int pos, const T data)

{

int i;

int nRetPos;

CNode *pTmpNode;

CNode *pNewNode;

pNewNode = new CNode;

if (NULL == pNewNode)

{

nRetPos = 0;

goto Exit0;

}

pNewNode->data = data;

// if the list is empty, replace the head node with the new node.

if (NULL == m_pNodeHead)

{

pNewNode->next = NULL;

m_pNodeHead = pNewNode;

nRetPos = 1;

goto Exit1;

}

// is pos range valid?

ASSERT(1 <= pos && pos <= m_nCount);

// if the list is not empty,

// seek to the pos of the list and insert the new node after it.

pTmpNode = m_pNodeHead;

for (i = 1; i < pos; ++i)

{

pTmpNode = pTmpNode->next;

}

pNewNode->next = pTmpNode->next;

pTmpNode->next = pNewNode;

nRetPos = pos + 1;

Exit1:

++m_nCount;

Exit0:

return nRetPos;

}

template

inline int CSList::GetCount() const

{

return m_nCount;

}

template

inline void CSList::RemoveAt(const int pos)

{

ASSERT(1 <= pos && pos <= m_nCount);

int i;

CNode *pTmpNode1;

CNode *pTmpNode2;

pTmpNode1 = m_pNodeHead;

// head node?

if (1 == pos)

{

m_pNodeHead = m_pNodeHead->next;

goto Exit1;

}

for (i = 1; i < pos; ++i)

{

// we will get the previous node of the target node after

// the for loop finished, and it would be stored into pTmpNode2

pTmpNode2 = pTmpNode1;

pTmpNode1 = pTmpNode1->next;

}

pTmpNode2->next = pTmpNode1->next;

Exit1:

delete pTmpNode1;

--m_nCount;

}

template

inline void CSList::RemoveHead()

{

ASSERT(0 != m_nCount);

RemoveAt(1);

}

template

inline void CSList::RemoveTail()

{

ASSERT(0 != m_nCount);

RemoveAt(m_nCount);

}

template

inline void CSList::RemoveAll()

{

int i;

int nCount;

CNode *pTmpNode;

nCount = m_nCount;

for (i = 0; i < nCount; ++i)

{

pTmpNode = m_pNodeHead->next;

delete m_pNodeHead;

m_pNodeHead = pTmpNode;

}

m_nCount = 0;

}

template

inline T& CSList::GetTail()

{

ASSERT(0 != m_nCount);

int i;

int nCount;

CNode *pTmpNode = m_pNodeHead;

nCount = m_nCount;

for (i = 1; i < nCount; ++i)

{

pTmpNode = pTmpNode->next;

}

return pTmpNode->data;

}

template

inline T CSList::GetTail() const

{

ASSERT(0 != m_nCount);

int i;

int nCount;

CNode *pTmpNode = m_pNodeHead;

nCount = m_nCount;

for (i = 1; i < nCount; ++i)

{

pTmpNode = pTmpNode->next;

}

return pTmpNode->data;

}

template

inline T& CSList::GetHead()

{

ASSERT(0 != m_nCount);

return m_pNodeHead->data;

}

template

inline T CSList::GetHead() const

{

ASSERT(0 != m_nCount);

return m_pNodeHead->data;

}

template

inline T& CSList::GetAt(const int pos)

ASSERT(1 <= pos && pos <= m_nCount);

int i;

CNode *pTmpNode = m_pNodeHead;

for (i = 1; i < pos; ++i)

{

pTmpNode = pTmpNode->next;

}

return pTmpNode->data;

}

template

inline T CSList::GetAt(const int pos) const {

ASSERT(1 <= pos && pos <= m_nCount);

int i;

CNode *pTmpNode = m_pNodeHead;

for (i = 1; i < pos; ++i)

{

pTmpNode = pTmpNode->next;

}

return pTmpNode->data;

}

template

inline void CSList::SetAt(const int pos, T data) {

ASSERT(1 <= pos && pos <= m_nCount);

int i;

CNode *pTmpNode = m_pNodeHead;

for (i = 1; i < pos; ++i)

{

pTmpNode = pTmpNode->next;

}

pTmpNode->data = data;

}

template

inline int CSList::Find(const T data) const

{

int i;

int nCount;

CNode *pTmpNode = m_pNodeHead;

nCount = m_nCount;

for (i = 0; i < nCount; ++i)

{

if (data == pTmpNode->data)

return i + 1;

pTmpNode = pTmpNode->next;

}

return 0;

}

#endif // __SINGLE_LIST_H__

调用如下:

/////////////////////////////////////////////////////////////////////////////// //

// FileName : slist.cpp

// Version : 0.10

// Author : Luo Cong

// Date : 2004-12-29 10:41:18

// Comment :

//

///////////////////////////////////////////////////////////////////////////////

#include

#include "slist.h"

using namespace std;

int main()

{

int i;

int nCount;

CSList slist;

#ifdef _DEBUG

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);

#endif

slist.InsertAfter(slist.InsertAfter(slist.AddHead(1), 2), 3);

slist.InsertAfter(slist.InsertAfter(slist.GetCount(), 4), 5);

slist.InsertAfter(slist.GetCount(), 6);

slist.AddTail(10);

slist.InsertAfter(slist.InsertBefore(slist.GetCount(), 7), 8);

slist.SetAt(slist.GetCount(), 9);

slist.RemoveHead();

slist.RemoveTail();

// print out elements

nCount = slist.GetCount();

for (i = 0; i < nCount; ++i)

cout << slist.GetAt(i + 1) << endl;

}

代码比较简单,一看就明白,懒得解释了。如果有bug,请告诉我。

2.2 效率问题

考虑到效率的问题,代码中声明了一个成员变量:m_nCount,用它来记录链表的结点个数。这样有什么好处呢?在某些情况下就不用遍历链表了,例如,至少在GetCount()时能提高速度。

原书中提到了一个“表头”(header)或“哑结点”(dummy node)的概念,这个结点作为第一个结点,位置在0,它是不用的,我个人认为这样做有点浪费空间,所以并没有采用这种做法。

单链表在效率上最大的问题在于,如果要插入一个结点到链表的末端或者删除末端的一个结点,则需要遍历整个链表,时间复杂度是O(N)。平均来说,要访问一个结点,时间复杂度也有O(N/2)。这是链表本身的性质所造成的,没办法解决。不过我们可以采用双链表和循环链表来改善这种情况。

2.3 应用:一元多项式(加法和乘法)

2.3.1 基础知识

我们使用一元多项式来说明单链表的应用。假设有两个一元多项式:

P1(X) = X^2 + 2X + 3

以及

P2(X) = 3X^3 + 10X + 6

现在运用中学的基础知识,计算它们的和:

P1(X) + P2(X) = (X^2 + 2X + 3) + (3X^3 + 10X + 6)

= 3X^3 + 1X^2 + 12X^1 + 9

以及计算它们的乘积:

P1(X) * P2(X) = (X^2 + 2X + 3) * (3X^3 + 10X + 6)

= 3X^5 + 6X^4 + 19X^3 + 26X^2 + 42X^1 + 18

怎么样,很容易吧?:) 但我们是灵长类动物,这么繁琐的计算怎么能用手工来完成呢?(试想一下,如果多项式非常大的话……)我们的目标是用计算机来完成这些计算任务,代码就在下面。

2.3.2 代码实现

///////////////////////////////////////////////////////////////////////////////

//

// FileName : poly.cpp

// Version : 0.10

// Author : Luo Cong

// Date : 2004-12-30 17:32:54

// Comment :

//

///////////////////////////////////////////////////////////////////////////////

#include

#include "slist.h"

#define Max(x,y) (((x)>(y)) ? (x) : (y))

typedef struct tagPOL YNOMIAL

{

CSList Coeff;

int HighPower;

} * Polynomial;

static void AddPolynomial(

Polynomial polysum,

const Polynomial poly1,

const Polynomial poly2

)

{

int i;

int sum;

int tmp1;

int tmp2;

polysum->HighPower = Max(poly1->HighPower, poly2->HighPower);

for (i = 1; i <= polysum->HighPower + 1; ++i)

{

tmp1 = poly1->Coeff.GetAt(i);

tmp2 = poly2->Coeff.GetAt(i);

sum = tmp1 + tmp2;

polysum->Coeff.AddTail(sum);

}

}

static void MulPolynomial(

Polynomial polymul,

const Polynomial poly1,

const Polynomial poly2

)

{

int i;

int j;

int tmp;

int tmp1;

int tmp2;

polymul->HighPower = poly1->HighPower + poly2->HighPower;

// initialize all elements to zero

for (i = 0; i <= polymul->HighPower; ++i)

polymul->Coeff.AddTail(0);

for (i = 0; i <= poly1->HighPower; ++i)

{

tmp1 = poly1->Coeff.GetAt(i + 1);

for (j = 0; j <= poly2->HighPower; ++j)

{

tmp = polymul->Coeff.GetAt(i + j + 1);

tmp2 = poly2->Coeff.GetAt(j + 1);

tmp += tmp1 * tmp2;

polymul->Coeff.SetAt(i + j + 1, tmp);

}

}

}

static void PrintPoly(const Polynomial poly)

{

int i;

for (i = poly->HighPower; i > 0; i-- )

printf( "%dX^%d + ", poly->Coeff.GetAt(i + 1), i);

printf("%d\n", poly->Coeff.GetHead());

}

int main()

{

Polynomial poly1 = NULL;

Polynomial poly2 = NULL;

Polynomial polyresult = NULL;

#ifdef _DEBUG

_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); #endif

poly1 = new (struct tagPOL YNOMIAL);

if (NULL == poly1)

goto Exit0;

poly2 = new (struct tagPOL YNOMIAL);

if (NULL == poly2)

goto Exit0;

polyresult = new (struct tagPOL YNOMIAL);

if (NULL == polyresult)

goto Exit0;

// P1(X) = X^2 + 2X + 3

poly1->HighPower = 2;

poly1->Coeff.AddHead(0);

poly1->Coeff.AddHead(1);

poly1->Coeff.AddHead(2);

poly1->Coeff.AddHead(3);

// P2(X) = 3X^3 + 10X + 6

poly2->HighPower = 3;

poly2->Coeff.AddHead(3);

poly2->Coeff.AddHead(0);

poly2->Coeff.AddHead(10);

poly2->Coeff.AddHead(6);

// add result = 3X^3 + 1X^2 + 12X^1 + 9

AddPolynomial(polyresult, poly1, poly2);

PrintPoly(polyresult);

// reset

polyresult->Coeff.RemoveAll();

// mul result = 3X^5 + 6X^4 + 19X^3 + 26X^2 + 42X^1 + 18 MulPolynomial(polyresult, poly1, poly2);

PrintPoly(polyresult);

Exit0:

if (poly1)

{

delete poly1;

poly1 = NULL;

}

if (poly2)

{

delete poly2;

poly2 = NULL;

}

if (polyresult)

{

delete polyresult;

polyresult = NULL;

}

}

2.3.3 说明

原书中只给出了一元多项式的数组实现,而没有给出单链表的代码。实际上用单链表最大的好处在于多项式的项数可以为任意大。(当然只是理论上的。什么?你的内存是无限大的?好吧,当我没说……)

我没有实现减法操作,实际上减法可以转换成加法来完成,例如 a - b 可以换算成 a + (-b),那么我们的目标就转变为做一个负号的运算了。至于除法,可以通过先换算“-”,然后再用原位加法来计算。(现在你明白加法有多重要了吧?^_^)有兴趣的话,不妨您试试完成它,我的目标只是掌握单链表的使用,因此不再继续深究。

第三章

双链表

单链表学完后,理所当然的就是轮到双链表了。

3.1 代码实现

双链表的实现如下:

///////////////////////////////////////////////////////////////////////////////

//

// FileName : dlist.h

// Version : 0.10

// Author : Luo Cong

// Date : 2005-1-4 10:33:21

// Comment :

//

///////////////////////////////////////////////////////////////////////////////

#ifndef __DOUBLE_LIST_H__

#define __DOUBLE_LIST_H__

#include

#include

#ifdef _DEBUG

#define DEBUG_NEW new (_NORMAL_BLOCK, THIS_FILE, __LINE__)

#endif

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#ifdef _DEBUG

#ifndef ASSERT

#define ASSERT assert

#endif

#else // not _DEBUG

#ifndef ASSERT

#define ASSERT

#endif

#endif // _DEBUG

template

class CNode

{

public:

T data;

CNode *prior;

CNode *next;

CNode() : data(T()), prior(NULL), next(NULL) {}

CNode(const T &initdata) : data(initdata), prior(NULL), next(NULL) {} };

template

class CDList

{

protected:

int m_nCount;

CNode *m_pNodeHead;

CNode *m_pNodeTail;

public:

CDList();

CDList(const T &initdata);

~CDList();

public:

int IsEmpty() const;

int GetCount() const;

int InsertBefore(const int pos, const T data);

int InsertAfter(const int pos, const T data);

int AddHead(const T data);

int AddTail(const T data);

void RemoveAt(const int pos);

void RemoveHead();

void RemoveTail();

void RemoveAll();

T& GetTail();

T GetTail() const;

T& GetHead();

T GetHead() const;

T& GetAt(const int pos);

T GetAt(const int pos) const;

void SetAt(const int pos, T data);

int Find(const T data) const;

T& GetPrev(int &pos);

T& GetNext(int &pos);

};

template

inline CDList::CDList() : m_nCount(0), m_pNodeHead(NULL), m_pNodeTail(NULL) {

}

template

inline CDList::CDList(const T &initdata)

: m_nCount(0), m_pNodeHead(NULL), m_pNodeTail(NULL)

{

AddHead(initdata);

}

template

inline CDList::~CDList()

{

RemoveAll();

}

template

inline T& CDList::GetNext(int &pos)

{

ASSERT(0 != m_nCount);

ASSERT(1 <= pos && pos <= m_nCount);

int i;

CNode *pTmpNode = m_pNodeHead;

结构动力学读书笔记

《结构动力学》读书报告 学院 专业 学号 指导老师 2013 年 5月 28日

摘要:本书在介绍基本概念和基础理论的同时,也介绍了结构动力学领域的若干前沿研究课题。既注重读者对基本知识的掌握,也注重读者对结构振动领域研究发展方向的掌握。主要容包括运动方程的建立、单自由度体系、多自由度体系、无限自由度体系的动力学问题、随机振动、结构动力学的前沿研究课题。侧重介绍单自由度体系和多自由度体系,重点突出,同时也着重介绍了在抗震中的应用。 1 概述 1.1结构动力学的发展及其研究容: 结构动力学,作为一门课程也可称作振动力学,广泛地应用于工程领域的各个学科,诸如航天工程,航空工程,机械工程,能源工程,动力工程,交通工程,土木工程,工程力学等等。作为固体力学的一门主要分支学科,结构动力学起源于经典牛顿力学,就是牛顿质点力学。质点力学的基本问题是用牛顿第二定律来建立公式的。牛顿质点力学,拉格朗日力学和哈密尔顿力学是结构动力学基本理论体系组成的三大支柱。 经典动力学的理论体系早在19世纪中叶就已建立,。但和弹性力学类似,理论体系虽早已建立,但由于数学求解上的异常困难,能够用来解析求解的实际问题实在是少之又少,能够通过手算完成的也不过仅仅限于几个自由度的结构动力体系。因此,在很长一段时间,动力学的求解思想在工程实际中并未得到很好的应用,人们依然习惯于在静力学的畴用静力学的方法来解决工程实际问题。 随着汽车,飞机等新时代交通工具的出现,后工业革命时代各种大型机械的创造发明,以及越来越多的摩天大楼的拔地而起,工程界日新月异的发展和变化对工程师们提出了越来越高的要求,传统的只考虑静力荷载的设计理念和设计方法显然已经跟不上时代的要求了。也正是从这个时候起,结构动力学作为一门学科,也开始受到工程界越来越高的重视,从而带动了结构动力学的快速发展。 结构动力学这门学科在过去几十年来所经历的深刻变革,其主要原因也正是由于电子计算机的问世使得大型结构动力体系数值解的得到成为可能。由于电子计算机的超快速度的计算能力,使得在过去凭借手工根本无法求解的问题得到了解决。目前,由于广泛地应用了快速傅立叶变换(FFT),促使结构动力学分析发生了更加深刻地变化,而且使得结构动力学分析与结构动力试验之间的相互关系也开始得以沟通。总之,计算机革命带来了结构动力学求解方法的本质改变。 作为一门课程,结构动力学的基本体系和容主要包括以下几个部分:单自由度系统结构动力学,;多自由度系统结构动力学,;连续系统结构动力学。此外,如果系统上所施加的动力荷载是确定性的,该系统就称为确定性结构动力系统;而如果系统上所施加的动力荷载是非确定性的,该系统就称为概率性结构动力系统。 1.2主要理论分析 结构的质量是一连续的空间函数,因此结构的运动方程是一个含有空间坐标和时间的偏微分方程,只是对某些简单结构,这些方程才有可能直接求解。对于绝大多数实际结构,在工程分析中主要采用数值方法。作法是先把结构离散化成为一个具有有限自由度的数学模

《数学之美》读书笔记

《数学之美》读书笔记 《数学之美》读书笔记 《数学之美》是一本领域相关的数学概念书,生动形象地讲解了关于数据挖掘、文本检索等方面的基础知识,可以作为数据挖掘、文本检索的入门普及书。另外,就像作者吴军老师提到的,关键是要从中学到道----解决问题的方法,而不仅仅是术。书中也启发式的引导读者形成自己解决问题的道。 下面记录一下自己读这本书的一些感想: 第一章《文字和语言vs数字和信息》:文字和语言中天然蕴藏着一些数学思想,数学可能不仅仅的是一门非常理科的知识,也是一种艺术。另外,遇到一个复杂的问题时,可能生活中的一些常识,一些简单的思想会给你带来解决问题的灵感。 第二章《自然语言处理----从规则到统计》:试图模拟人脑处理语言的模式,基于语法规则,词性等进行语法分析、语义分析的自然语言处理有着很大的复杂度,而基于统计的语言模型很好的解决了自然语言处理的诸多难题。人们认识这个过程,找到统计的方法经历了20多年,非常庆幸我们的前辈已经帮我们找到了正确的方法,不用我们再去苦

苦摸索。另外,这也说明在发现真理的过程中是充满坎坷的,感谢那些曾经奉献了青春的科学家。自己以后遇到问题也不能轻易放弃,真正的成长是在解决问题的过程中。事情不可能一帆风顺的,这是自然界的普遍真理吧! 第三章《统计语言模型》:自然语言的处理找到了一种合适的方法---基于统计的模型,概率论的知识开始发挥作用。二元模型、三元模型、多元模型,模型元数越多,计算量越大,简单实用就是最好的。对于某些不出现或出现次数很少的词,会有零概率问题,这是就要找到一数学方法给它一个很小的概率。以前学概率论的时候觉的没什么用,现在开始发现这些知识可能就是你以后解决问题的利器。最后引用作者本章的最后一句话:数学的魅力就在于将复杂的问题简单化。 第四章《谈谈中文分词》:中文分词是将一句话分成一些词,这是以后进一步处理的基础。从开始的查字典到后来基于统计语言模型的分词,如今的中文分词算是一个已经解决的问题。然而,针对不同的系统、不同的要求,分词的粒度和方法也不尽相同,还是针对具体的问题,提出针对该问题最好的方法。没有什么是绝对的,掌握其中的道才是核心。 第五章《隐马尔科夫模型》:隐马尔科夫模型和概率

数据结构与算法分析习题与参考答案

大学 《数据结构与算法分析》课程 习题及参考答案 模拟试卷一 一、单选题(每题 2 分,共20分) 1.以下数据结构中哪一个是线性结构?( ) A. 有向图 B. 队列 C. 线索二叉树 D. B树 2.在一个单链表HL中,若要在当前由指针p指向的结点后面插入一个由q指向的结点, 则执行如下( )语句序列。 A. p=q; p->next=q; B. p->next=q; q->next=p; C. p->next=q->next; p=q; D. q->next=p->next; p->next=q; 3.以下哪一个不是队列的基本运算?() A. 在队列第i个元素之后插入一个元素 B. 从队头删除一个元素 C. 判断一个队列是否为空 D.读取队头元素的值 4.字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成( ) 个不同的字符串? A.14 B.5 C.6 D.8 5.由权值分别为3,8,6,2的叶子生成一棵哈夫曼树,它的带权路径长度为( )。 以下6-8题基于图1。 6.该二叉树结点的前序遍历的序列为( )。 A.E、G、F、A、C、D、B B.E、A、G、C、F、B、D C.E、A、C、B、D、G、F D.E、G、A、C、D、F、B 7.该二叉树结点的中序遍历的序列为( )。 A. A、B、C、D、E、G、F B. E、A、G、C、F、B、D C. E、A、C、B、D、G、F E.B、D、C、A、F、G、E 8.该二叉树的按层遍历的序列为( )。

A.E、G、F、A、C、D、B B. E、A、C、B、D、G、F C. E、A、G、C、F、B、D D. E、G、A、C、D、F、B 9.下面关于图的存储的叙述中正确的是( )。 A.用邻接表法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 B.用邻接表法存储图,占用的存储空间大小与图中边数和结点个数都有关 C. 用邻接矩阵法存储图,占用的存储空间大小与图中结点个数和边数都有关 D.用邻接矩阵法存储图,占用的存储空间大小只与图中边数有关,而与结点个数无关 10.设有关键码序列(q,g,m,z,a,n,p,x,h),下面哪一个序列是从上述序列出发建 堆的结果?( ) A. a,g,h,m,n,p,q,x,z B. a,g,m,h,q,n,p,x,z C. g,m,q,a,n,p,x,h,z D. h,g,m,p,a,n,q,x,z 二、填空题(每空1分,共26分) 1.数据的物理结构被分为_________、________、__________和___________四种。 2.对于一个长度为n的顺序存储的线性表,在表头插入元素的时间复杂度为_________, 在表尾插入元素的时间复杂度为____________。 3.向一个由HS指向的链栈中插入一个结点时p时,需要执行的操作是________________; 删除一个结点时,需要执行的操作是______________________________(假设栈不空而 且无需回收被删除结点)。 4.对于一棵具有n个结点的二叉树,一个结点的编号为i(1≤i≤n),若它有左孩子则左 孩子结点的编号为________,若它有右孩子,则右孩子结点的编号为________,若它有 双亲,则双亲结点的编号为________。 5.当向一个大根堆插入一个具有最大值的元素时,需要逐层_________调整,直到被调整 到____________位置为止。 6.以二分查找方法从长度为10的有序表中查找一个元素时,平均查找长度为________。 7.表示图的三种常用的存储结构为_____________、____________和_______________。 8.对于线性表(70,34,55,23,65,41,20)进行散列存储时,若选用H(K)=K %7 作为散列函数,则散列地址为0的元素有________个,散列地址为6的有_______个。 9.在归并排序中,进行每趟归并的时间复杂度为______,整个排序过程的时间复杂度为 ____________,空间复杂度为___________。 10.在一棵m阶B_树上,每个非树根结点的关键字数目最少为________个,最多为________ 个,其子树数目最少为________,最多为________。 三、运算题(每题 6 分,共24分) 1.写出下列中缀表达式的后缀形式: (1)3X/(Y-2)+1 (2)2+X*(Y+3) 2.试对图2中的二叉树画出其: (1)顺序存储表示的示意图; (2)二叉链表存储表示的示意图。 3.判断以下序列是否是小根堆? 如果不是, 将它调 图2 整为小根堆。 (1){ 12, 70, 33, 65, 24, 56, 48, 92, 86, 33 } (2){ 05, 23, 20, 28, 40, 38, 29, 61, 35, 76, 47, 100 } 4.已知一个图的顶点集V和边集E分别为: V={1,2,3,4,5,6,7};

《结构思考力》读后感_心得体会

《结构思考力》读后感 本文是关于心得体会的《结构思考力》读后感,感谢您的阅读! 《结构思考力》读后感 苏州现场班朱从义 没看过《金字塔原理》,但是我们基本可以认为《结构思考力》这本书是对金字塔原理的总结和提炼,并用作者的思维方式进行了呈现。金字塔原理的核心是四点:结论先行;以上统下;归类分组;逻辑递进。 而作者这本书则是将其核心分为五部分:明确理念打基础;基于目标定主题;纵向结构分层次;横向结构选顺序;形象表达做演示; 第一部分,明确理念打基础,事实上这部分是作者阐述了金字塔原理的基本思想,强调了结构思考力的重要性。我们在很多时候都要面临表达,如何能做有效的时间里面将自己的观点清晰传达给受众者是在职场中非常重要的技能,无论是同事还是上司都希望能够进行有效的沟通;而客户更是时间有限,希望能够在极短时间获得足够多的信息。因此结构化的思考和表达就会至关重要。 第二部分,基于目标定主题,其实就是"结论先行".我们在职场中间绝大部分时候需要尽快的传递自己的观点,以便对方能够能够抓住主线。正如麦肯锡的30秒原则,如果我们不能把一件事情在30秒内讲述清楚,意味着我们可能会丧失很多机会。因此一开始开章明义就成了最好的方式,如果时间只有30秒,那么能把结论讲清楚就算不错了。 第三部分,纵向结构分层次,也就是"以上统下".30s后,如果你还有时间,就可以尝试找一些论据去支撑你的结论。而每一个论据本身又可以找一些理由去证明,这样就可以逐渐递进下去,直到逻辑显而易见的容易被接受。但是值得注意的是,大部分人同时能记住的原因不会太多,不能超过7条,最好是3条。因此我们在列举理由的时候,不能简单的罗列,要进行思考,并将有相关性的理由整合在一起进行高度概括,这就是"归类分组".只有这样,才能进行快速有效的解释和阐述。 第四部分,横向结构选顺序,也就是"逻辑递进".在每一组证据的内部,并不是可以随便不分先后的阐述,这样容易给人造成混乱和跳跃的感觉,从而形成理解上的障碍。因此,我们需要在同一组论据的阐述顺序上进行思考和重排,使

《学习动力》读后感

《学习动力》读后感 《学习动力》读后感 《学习动力》作者是李洪玉,2011年6月1日由湖北教育出版社出版,该书主要介绍了各种学习动机的培养与激发。 内容摘要:一个人要想学习好,不能离开硬件和软件,更不能离开电源。本从非智力因素这个角度,论述各种学习动机的培养与激发。有力地阐明各种非智力因素的概念、种类(或结构)、功能及影响其形成与发展的因素(或机制),使读者首先对各种非智力因素的本质有一个较为明确的认识;在实践上,结合各种非智力因素的培养与激发,提出了具体的、有效的、有根据的培养途径和措施。 本书共分为二大章,从智力与学习、非智力与学习、动机三大部分进行了阐述。智力因素与学习的关系,不容置疑,本书用了大篇幅,介绍了后两部分内容,有理论有例子,很有说服力,有相当的指导意义。 一、非智力因素与学习。 上海师范大学燕国材教授的《应重视非智力因素的培养》一文发表,引起了我国教育学和心理学界对非智力因素培养的重视。

非智力因素,又称非认知因素,指人在智慧活动中,不直接参与认知过程的心理因素,包括需要、兴趣、动机、情感、意志、性格等方面,是指智力以外的对学习活动起着起动、导向、维持和强化作用的个性心理。 一个智力水平较高的人,如果他的非智力因素没有得到很好的发展,往往不会有太多的成就。相反,一个智力水平一般的人,如果他的非智力因素得到很好的发展,就可能取得事业上的成功,做出较大的贡献。 我国著名的数学家张广厚,在小学、中学读书时,智力水平并不出众,他的成功与良好的非智力因素有关。他曾说:“搞数学不需太聪明,中等天分就可以,主要是毅力和钻劲。”达尔文也曾说过:“我之所以能在科学上成功,最重要的就是我对科学的热爱,对长期探索的坚韧,对观察的搜索,加上对事业的勤奋。”从心理学上讲,感情、意志、兴趣、性格、需要、目标、抱负、世界观等,是智力发展的内在因素。外因通过内因起作用。一个人的非智力因素得到良好的发展,不但有助于智力因素的充分发展,还可弥补其他方面的不足。反之,如果人缺乏意志,贪图安逸,势必影响其智力的发展。 作为教师,我们认识到,对学生的培养,非智力因素的培养和智力因素的培养同等重要,重视非智力因素,要把

数据结构与算法分析 C++版答案

Data Structures and Algorithm 习题答案 Preface ii 1 Data Structures and Algorithms 1 2 Mathematical Preliminaries 5 3 Algorithm Analysis 17 4 Lists, Stacks, and Queues 23 5 Binary Trees 32 6 General Trees 40 7 Internal Sorting 46 8 File Processing and External Sorting 54 9Searching 58 10 Indexing 64 11 Graphs 69 12 Lists and Arrays Revisited 76 13 Advanced Tree Structures 82 i

ii Contents 14 Analysis Techniques 88 15 Limits to Computation 94

Preface Contained herein are the solutions to all exercises from the textbook A Practical Introduction to Data Structures and Algorithm Analysis, 2nd edition. For most of the problems requiring an algorithm I have given actual code. In a few cases I have presented pseudocode. Please be aware that the code presented in this manual has not actually been compiled and tested. While I believe the algorithms to be essentially correct, there may be errors in syntax as well as semantics. Most importantly, these solutions provide a guide to the instructor as to the intended answer, rather than usable programs.

社会行动的结构读书笔记

读《社会行动的结构》 二、帕森斯对前人的分析和评价 (一)个人主义的实证主义 这里的个人主义实证主义主要是一些极度强调功利主义和理性主义的理论,帕森斯批判了霍布斯的秩序理论、洛克的古典经济学理论、马尔萨斯的功利主义理论、马克思的阶级对抗理论和社会达尔文主义,他认 为这些理论倾向容易导致激进实证主义。(如:强调遗传和本能的生物学还原论和强调外部环境的行为主义,他们都极度强调客观的因素,而把主观观点完全抛弃。)他们的理论缺陷在于把人原子化,对人的主 观性在社会行动中发挥的作用视而不见,行动者的“目的-手段”被忽视,难以研究包含着丰富情感和大 量非逻辑行为的社会行动。 (二)马歇尔 他有着强烈的经验主义倾向,纵观经验主义的发展历史,基本上可以区分为两类学派:温和的经验主义与 激进的经验主义。前者认为,所有的意识观念均来源于知觉,但同时也承认意识的机能(诸如记忆、想象 和语言的官能)是内在的能力。相比之下,后者的观点则更为激进,公开宣称不仅意念的内容,而且意念 的整个过程都不可能存在内部能力,而只能是习得的。也就是说,一切知识都来源于经验,都可以追溯其 起源;不仅没有任何天赋的或先天的命题。激进的经验主义者唯一强调感觉经验而否认理性思维,在他们 看来,理性认识是抽象的、间接的认识,思想愈抽象则更加空虚,不可靠,远离真理。他提出的著名的“效用”理论,以边际效用和生产率、消费者的过剩、替代原则和最大限度满足学说等概念加以阐述,构 成了一个严格的功利主义成分,其基本假设是个人在使手段适合于目的是具有合理性。这是他经济学理论 的逻辑中心。他的理论分为两个部分,即“关于财富的研究”和“关于人的研究”。然而这两个成分不可 能单独存在,后者是一种关于活动与生产和获取财富过程之间关系的理论。马歇尔把经济学设想为一种关 于具体经济活动的完整认识的科学。他认为不应当仅仅用功利主义的“需求满足”的模式来具体认识个人 主义社会,因为个人主义社会中包含着某些共同价值,如道德规范或自由。正是由于这种观点,使马歇尔 的部分理论被纳入帕森斯的“行动的自由意志理论”体系中。 (三)帕累托 他与马歇尔走了不同的道路,试图把经济学界定为关于社会生活的一个侧面或关于社会生活中一组成分的 抽象科学。他针对马歇尔的理论说明了即使在个人主义的经济秩序中,共同价值的成分在经验上也是重要的。提出了与经济学有关的这一价值成分在方法论方面的地位问题,以及由此而来的有关经济学范围的问题。帕累托与马歇尔截然相反,他在逻辑上把经济成分从自己的理论体系中离析出来,并以一种社会学对 之加以补充,在这种社会学中他系统的解释了某些非经济成分,并将之与经济成分综合在一起。(经济学 研究逻辑性行为,社会学研究非逻辑行为)而非逻辑行动则是一种剩余性范畴。他把非逻辑行动理论从作 用的方面加以分析,区分了相对持久起作用的成分和作用相对较为不稳定的成分,分别被称为剩余物和衍 生物。但对剩余物和衍生物的分析以及帕累托对它们做的分类,都没有明确的解释一条已被发现对行动理 论十分重要的分析上的区分,即规范性成分与非规范性成分之间的区分。而帕森斯认为这条区分线向着帕 累托本人没有研究到底的方向延伸。 与行动相关的非科学的理论的范畴包括两类成分:1.行动的终极目的;2.在解释为什么追求这些目的时所诉诸的那些非经验实体以及在据以对那些非科学的手段(如仪式)做出选择的标准中的某些成分。 帕累托把“手段-目的”关系链分为三个部分:终极目的、终极手段与条件、中介部分。(中介部分既是 手段也是目的)社会行动系统是一个由若干条关系链错综复杂地相交形成的“网络”,每一个具体行动都 是一个交汇点。 帕累托的研究证明了非逻辑行动(行动中带有价值成分的元素)对于行动的结构具有非常重要的意义,这 使得“帕累托的发展初看与实证主义有非常相似之处,却是明确的朝着唯意志论的行动理论方向发展的。” (四)涂尔干 涂尔干也是从批判的态度出发的。不过他不是在经济学层面上批判功利主义的,而是通过提出如何解是个 人主义社会秩序的问题既一般化又经验化地来批判功利主义。他的重要著作《自杀论》的一个重要成果, 就是在经验上证明了自杀中的“社会因素”的重要性。他用“失范”的概念解释自杀,强调了约束性规范 在社会行动中的重要作用。他在《社会分工论》中得出了与马歇尔相同的一般结论,即在契约中包含一些 成分是功利主义未能说明的。他称之为“契约中的非契约性成分”。(他所强调的社会共有价值或道德) 涂尔干的初期理论只是半超脱的经验主义理论体系,而他脱离刻板的实证主义体系经历了两个重要的阶段:

材料力学读书报告

《材料力学(1)课程读书报告》 《材料力学》这门课程是研究材料在各种外力作用下产生的应变力强度、刚度、稳定和 导致各种材料破坏的极限。《材料力学》是设计工业设施必须掌握的知识。与理论力学、结构 力学并称三大力学。 《材料力学》《材料力学》是一门技术基础课程,是衔接基础课与专业基础课的桥梁课程。 是理论研究和实验并重的一门学科。是固体力学中的一个重要的分支学科,是研究可变形固 体受到处荷载力或温度变化等因素的影响而发生力学响应的一门科学,是研究构件在受载过 程中的强度、刚度和稳定性问题的一门学科。它是门理论研究与工程实践相结合的非常密切 的一门学科。 材料力学的基本任务是在满足强度、刚度和稳定性的安全要求下以最经济的代价。为构 件确定合理的形状和尺寸选择适宜的材料,为构件设计提供必要的理论基础和计算方法解决 结构设计安全可靠与经济合理的矛盾。 在人们运用材料进行建筑,工业生产的过程中,需要对材料的实际随能力和内部变化进 行研究这就催生了材料力学。在材料力学中,将研究对象被看作均匀,连续且具有各同性的 线性弹性物体,但在实际研究中不可能会有符合这些条件的材料,所以须要各种理论与实际 方法对材料进行实验比较,种材料的相关数据。我们一般通过假设对物体进行描述,这样有 利于我们通过数学计算出相关的数据,有连续性假设,均匀性假设。各向同性假设及小变型 假设等。 在材料力学中,物体由于外因而变化时,在物体内部各部分之间产生相互作用的内力以 低抗这种外因的作用,并力图使物体从变形的位置回复到变形前的位置,在所考察的截面某 一点单位面积上的内力称为应力。既受力物体内某点某微截面上的内力的分布集度,应变指 构件等物体内任一点因各种外力作用引起的形状和尺寸的相对改变(变形)。当撤除外力时固 体能恢复其变形的性能称为弹性,当撤除外力时固体能残留下来变形的性能称为塑性。物件 在外力作用下抵抗破坏的能力称强度。刚度是指构件在外力作用下抵抗变形的能力。 研究内力和应力一般用截面法,目的是为了求得物体内部各部分之间的相互作用力。轴 向拉伸(压缩)的计算公式为 ??fn 。?为横截面的应力。正应为和轴力fn同a 号。即拉应力为正,压应力为负。 原理:力作用于杆端的分布方式的不同,只影响杆端局部范围的应力分布影响区的轴向 范围的离杆端1~2个杆的横向尺寸。 《材料力学》在建设工程中有着之泛的应用。在桥梁,铁路,建筑,火箭等行业中起到 很重要的作用。如武汉长江大桥的设计,桥墩主要承受来自两侧浮桥本身的重力,桥面上生 物的重力,钢索主要受到拉力一方面是桥身以及桥面物体它们的自重。另一方面是钢索自重, 在这两个比较大的力的作用下钢索处于被拉伸状态。 《材料力学》研究的问题是构件的强度、刚度和稳定性;所研究的构件主要是杆件、几 种变形形式包括拉伸压缩、剪切、弯曲和扭转这几种基本变形形式。研究《材料力学》就是 解决在工程中研究外力作用下,如何保证构件正常的工作的问题。因此,材料力学是我们在 设计建造工程中起着相关重要的作用。篇二:弹塑性力学读书报告 弹塑性力学读书报告 本学期我们选修了樊老师的弹塑性力学,学生毕备受启发对工科 来说,弹塑性力学的任务和材料力学、结构力学的任务一样,是分析 各种结构物体和其构件在弹塑性阶段的应力和应变,校核它们是否具 有所需的强度、刚度和稳定性,并寻求或改进它们的计算方法。 但是在研究方法上也有不同,材料力学为简化计算,对构件的应 力分布和变形状态作出某些假设,因此得到的解答是粗略和近似的;

数据结构与算法分析—期末复习题及答案

单选题(每题2 分,共20分) 1.对一个算法的评价,不包括如下(B )方面的容。 A.健壮性和可读性B.并行性C.正确性D.时空复杂度 2.在带有头结点的单链表HL中,要向表头插入一个由指针p指向的结点,则执行( A )。 A. p->next=HL->next; HL->next=p; B. p->next=HL; HL=p; C. p->next=HL; p=HL; D. HL=p; p->next=HL; 3.对线性表,在下列哪种情况下应当采用链表表示?( B ) A.经常需要随机地存取元素 B.经常需要进行插入和删除操作 C.表中元素需要占据一片连续的存储空间 D.表中元素的个数不变 4.一个栈的输入序列为1 2 3,则下列序列中不可能是栈的输出序列的是( C ) A. 2 3 1 B. 3 2 1 C. 3 1 2 D. 1 2 3 6.若需要利用形参直接访问实参时,应将形参变量说明为(D )参数。 A.值B.函数C.指针D.引用 8.在稀疏矩阵的带行指针向量的存储中,每个单链表中的结点都具有相同的(A )。 A.行号B.列号C.元素值D.非零元素个数 10. 从二叉搜索树中查找一个元素时,其时间复杂度大致为(C )。 A. O(n) B. O(1) C. O(log2n) D. O(n2) 二、运算题(每题6 分,共24分) 1.数据结构是指数据及其相互之间的_联系。当结点之间存在M对N(M:N)的联系时,称这种结构为 __图__。 2.队列的插入操作是在队列的___尾_进行,删除操作是在队列的_首_进行。 3.当用长度为N的数组顺序存储一个栈时,假定用top==N表示栈空,则表示栈满的条件是___top==0___(要超出才为满)_______________。 4.对于一个长度为n的单链存储的线性表,在表头插入元素的时间复杂度为___ O(1)__,在表尾 插入元素的时间复杂度为___ O(n)___。 5.设W为一个二维数组,其每个数据元素占用4个字节,行下标i从0到7 ,列下标j从0到3 , 则二维数组W的数据元素共占用_128__个字节。W中第6 行的元素和第4 列的元素共占用__44_个字节。 若按行顺序存放二维数组W,其起始地址为100,则二维数组元素W[6,3]的起始地址__108_。 7.二叉树是指度为2的___有序___树。一棵结点数为N的二叉树,其所有结点的度的总和是 ___n-1____。 8.对一棵二叉搜索树进行中序遍历时,得到的结点序列是一个_有序序列__。对一棵由算术表达式组 成的二叉语法树进行后序遍历得到的结点序列是该算术表达式的__后缀表达式____。 9.对于一棵具有n个结点的二叉树,用二叉链表存储时,其指针总数为_____________个,其中 _______________个用于指向孩子,_________________个指针是空闲的。 10.若对一棵完全二叉树从0开始进行结点的编号,并按此编号把它顺序存储到一维数组A中,即编号为0 的结点存储到A[0]中。其余类推,则A[ i ]元素的左孩子元素为________,右孩子元素为_______________,双亲元素为____________。 11.在线性表的散列存储中,处理冲突的常用方法有________________________和 _____________________________两种。

结构力学读书笔记

竭诚为您提供优质文档/双击可除 结构力学读书笔记 篇一:结构力学感想 感悟结构力学 这学期开设土木工程专业基础课结构力学,给我第一印象是:难并且复杂,但是实用。结构力学(structuralmechanics)是固体力学的一个分支,它主要研究工程结构受力和传力的规律,以及如何进行结构优化的学科,它是土木工程专业和机械类专业学生必修的学科。我以后专业方向可能选择结构方向,那么未来的工作和学习很可能一直需要学习结构力学并且研究它。下面谈谈对结构力学初步的感悟。 结构力学研究的内容包括结构的组成规则,结构在各种效应(外力,温度效应,施工误差及支座变形等)作用下的响应,包括内力(轴力,剪力,弯矩,扭矩)的计算,位移(线位移,角位移)计算,以及结构在动力荷载作用下的动力响应(自振周期,振型)的计算等。结构力学通常有三种分析的方法:能量法,力法,位移法,由位移法衍生出的矩

阵位移法后来发展出有限元法,成为利用计算机进行结构计算的理论基础。这三种分析方法实用而且能把复杂的问题简单化,也就是简化实际工程中的问题。在实际生活中,结构无处不在,结构体系是整个工程核心,结构一旦出问题,那么整个工程体系将会出现问题。土建、水利等建筑工程首先考虑的就是建筑工程的结构,结构就是组成工程的灵魂。任何复杂的工程体系都可以简化成一个个简单的结构体系来 分析,进而强化改进整个建筑,使它们能够更安全、更经济、更耐久,满足工程需要。 结构力学在当前的实际中要靠建筑设计作为基础,在满足该设计的前提下进行结构分析与设计,单纯的从结构方面进行的建筑必定难以满足美观的要求,而在现在的建筑中,没有好的外观,纵使你的结构固若金汤也很难被接受。多数情况下,结构设计在建筑设计之后支持那些设计师设计出的外观。结构力学的学习就是为了这一目标,为建筑设计师设计出的建筑图纸设计满足要求的结构,最实用的东西,往往在幕后下功夫,不可否认,结构是关键性作用。以后我如果学习结构的话,那么我将是一个幕后英雄了。 这学期的结构力学,算是初次接触,好多内容都不好理解,理论的东西都很抽象,我只能说我思维跟不上,也不可否认用的功课不够。在结构力学学习的过程中,培养了一个简化问题的能力吧,结构力学的核心思想就是简化,把复杂

《医疗大数据》读书笔记

在我国,由于国家信息化战略的侧重与新一轮医疗制度改革的催生,从历史沿革角度看,医疗设备和医疗服务的信息化是被涵盖在医疗机构信息化之内。 结合国际上统一的医疗信息化划分标准与我国特色,医疗机构信息化由以下部分组成。1)医院管理信息系统。 医院管理信息系统,指以收费为中心,对门急诊的挂号、划价、收费、配药,住院患者的医嘱、配药、记账,以及医院的人、财、物等工作,实施计算机网络管理,对由各信息点采集的数据进行初步统计分析,并提供管理人员查询、管理和决策。 临床信息系统,指以患者为中心,使用影像存档和传输系统(PACS)、放射信息系统(radiology information system,RIS)、检验信息系统(laboratory information management system,LIS)、病理信息系统(pathology information system,PIS)、手术室信息系统(operating room information system,ORIS)等,用来全面收集患者的临床信息,并通过医生工作站提供给医生。医生可使用电子医嘱录入系统(computerized physician order entry,CPOE)录入处方、医嘱和检查申请单,查询检查结果,以医疗文件“无纸化”来提高诊治的 “三长一短”现象:挂号、候诊、收费队伍长, 看病时间短。 电子病历并非是患者传统纸质病历单纯的电子化,而是实现病 历信息的采集、存储、传递、表现和加工利用。挖掘电子病历数据,能从临床路径上用数据循证医学证据,建立起有关临床治疗的多种常规模式,并最终起到规范医疗行为的作用,减少变异、降低成本、提高质量,这无疑是有重要价值的。 上医治未病之病,谓之养生;中医治欲病之病,谓之保健;下医治已病之病,谓之医疗”, 医疗大数据的来源主要有以下4个方面:(1)制药企业、生命科学药物研发所产生的数据是相当密集的,对于中小型的企业也在百亿字节(TB)以上的。

结构可靠度读书笔记

结构可靠度结课论文 摘要:本文主要从两个方面介绍自己对结构可靠度课程的学习。第一,介绍自己对于结构可靠度基本理论,结构可靠度分析方法(包括一次二阶矩法、二次二阶矩法和结构可靠度数值模拟方法)的理解;第二,论述了结构可靠性理论的发展历史,最后简单阐述了可靠性理论的研究和应用现状,并展望了未来的发展趋势。 一引言 工程结构在设计中需要遵循安全可靠、适用、美观、耐久等方面原则,在其使用期内需要安全可靠的承受各种作用,它们的安全可靠与否不但影响结构正常使用,通常还关系到人身安危。 在工程结构的设计中,当结构总体布置、结构方案和型式已经确定,接下来要进行的就是结构计算,在结构计算中我们对于截面及构件的设计应使所设计结构在设计基准期内经济合理地满足下列要求:1能承受正常施工和正常使用期间可能出现的各种作用(包括荷载及外加变形或约束变形);2在正常使用时具有良好的工作性能;3在正常维修和养护下,具有足够的耐久性;4在偶然事件(如地震、爆炸、龙卷风等)发生时及发生后,能够保持必要的整体稳定性。 结构的安全性、适用性、和耐久性三折总称为结构的可靠性[1]。用来度量可靠性的指标称为可靠度。上述要求的第1、4项,关系到人身财产安全,属于结构的安全性;第2项关系到结构的适用性,第3项关系到结构的耐久性。 二结构可靠度课程学习笔记 2.1影响工程结构可靠性的三种不确定性[2] 2.1.1事物的随机性 事物是随机性是指,事件发生的条件不充分,使得在条件与事件之间不能出现必然的因果关系,从而事件的出现与否表现出不确定性,这种不确定性成为随机性。研究事物随机性问题的数学方法主要有概率论、数理统计和随机过程。

《心理学与生活》读书笔记

《心理学与生活》读书笔记 经济学院金双2班冯承杰 2014141013025 《心理学与生活》是美国著名心理学家理查德?格里格和菲利普?津巴多写的一本经典的心理学课本,全书主要讲的是心理学与人们日常生活的关系。 全书一共分为了18个章节: 第一章是生活中的心理学,主要讲的是心理学的定义以及现代心理学的发展状况; 第二章是心理学的研究方法; 第三章至第六章主要讲的就是感觉、知觉、行为上的心理学基础; 第七章至第十章主要讲的是教学心理学的内容; 第十一章至第十四章,主要讲的是在人本省存在的心理学特性; 第十五章至第十六章主要讲的是心理障碍和心理治疗的内容; 第十七章至第十八章主要讲的是社会人际交往关系之中的心理学。 阅读了《心理学与生活》的部分章节后,我可以感受到生活低位每一个地方都是充满着心理学知识的,心理学真的和我们的日常生活是息息相关的,运用好了心理学的知识,我们就能够更加有效的掌控我们自己的生活。 通过对第一章详细的阅读和理解,我认为当代心理学有以下观点:(1)生物学观点: 引导心理学家在基因大脑、神经系统及内分泌系统中寻找行为的原因。生物学观点引导心理学家在基因、大脑、神经系统以及内分泌系统中寻找行为的原因。一个器官的功能由其身体结构和生物化学过程来解释。体验和行为在很大程度上被理解为在神经细胞内部和之间发生的化学和电活动的结果。 (2)心理动力学观点: 这种观点认为,人的行为是从继承来的本能和生物驱力中产生的,而且试图解决个人需要和社会要求之间的冲突。理动力学的动机原则是由维也纳的医生弗洛伊德在19世纪末和20世纪初最完整地发展起来的。弗洛伊德的思想是从对精神病人临床工作中得出来的,但是他相信他观察到的这些

涂子沛的《大数据》读后感

读涂子沛的《大数据》有感 沂源三中韩云祥 涂子沛的《大数据》从民主和国家战略的层面介绍了大数据的影响力,全书通篇没有晦涩难懂的专业术语,作者用平实的语言,形象生动的讲明白了数据开放、技术创新和社会进步之间的关系,环环相扣,鞭辟入里,引人入胜,非常值得深思。 《大数据》从奥巴马建设“前所未有的开放政府”出发,描写了半个多世纪以来数据对美国社会政治、商业、文化等方方面面的影响,谈及了1930年以来历任美国总统,可谓波澜壮阔。本书通过讲述美国半个多世纪信息开放、技术创新的历史,以别开生面的经典案例——奥巴马建设“前所未有的开放政府”的雄心、公共财政透明的曲折、《数据质量法》背后的隐情、全民医改法案的波澜、统一身份证的百年纠结、街头警察的创新传奇、美国矿难的悲情历史、商务智能的前世今生、数据开放运动的全球兴起,以及云计算、Facebook 和推特等社交媒体、Web3.0与下一代互联网的未来图景等等,为您一一细解,数据创新给公民、政府、社会带来的种种挑战和变革。《大数据》这部书,清楚地叙述了资讯时代对我们生活的影响与社会的控御力。它以数据为轴线,描绘了美国走过的开放创新历程。从该历程中我们看到,数据挖掘是一种知识生产过程,从中产生创新,产生管理,产生推动社会变革的理论与实践。更有意思的是,美国政治的发展,公民权利的实现,以及各种自由与福利的保障,都和对数据的创造性应用密切相关。这对已经步入信息时代的中国,尤其有借鉴意义。 众所周知,我们当今已经处在一个数据大爆炸的信息时代,数据之大主要

体现在三个方面:一是体量规模大。数据具有强劲的生命力,社会和生活的方方面面几乎都可以用数据来记录和测量,无处不存在,无时不产生,无刻不在发挥作用,生生不息,绵延不绝。以往我们选择的是记录哪方面的数据,如今我们选择不记录哪方面的数据。二是研究价值大。数据里既记录了事实,又蕴藏了商机,还反映了群众需求,因此数据影响着政府的决策和执行,引导着企业的盈利和创新,改变着个人的思想和习惯。数据就像土地、能源和资本一样,成为支撑整个社会经济发展的根本性资源。三是社会影响大。通过对海量数据的研究分析,能够从纷繁复杂的数据中挖掘出潜藏的规律性知识,将这些规律性知识应用于政治、经济社会生活的方方面面,将对社会运行模式和人类行为方式产生革命性的影响。 数据驱动的工具,实时反馈中蕴含着辅助教师和学生的巨大潜力。数据勘探和数据分析软件可以通过提供实时反馈学业表现来帮助学生。此外,教师可以使用数据驱动工具来研究学生的学习模式并修正课程以便满足学生个人的需要。 就我目前从事的教育管理工作而言,其各环节的工作都是以数据为基础而展开的,因此在工作中更要结合数据的三大特征,以数为据,用数据说话,用数据改进管理,用数据推动工作创新。数据的教育工具是如何提供即使反馈给学生和教师的。举例来说,一个教阅读的程序控件可以收集关于学生阅读某篇文章所需时间的数据。小测验将马上告诉学生们他们的答案是否正确——这就将教师从冗长累人耗时巨大的评分工作中解放出来——并能将学生的表现与同班同学和全县范围内的学生相比较。实时工具可以制作报告,详细展现每个学生阅读时间和理解力,词汇技能,以及补充工具的使用(例如提供额外词汇

读书笔记之建筑结构设计快速入门-第二版(刘铮)

P24 1.1.3如何初估各种结构构件的截面尺寸 主动记忆一些常识性的工程数据,比如梁板的跨高比,剪力墙墙厚,平时注意积累分析,多问多算,大工程做细,小工程做精。 1.1.3熟记民用建筑设计荷载 (1)多高层住宅楼(商品房),二次装修改造的荷载,落棉荷载一般取值2.0kN/m2。 (2)3个2.0kN/m2 表1 一般民用住宅荷载经验取值 楼面做法自重(2.0kN/m2)轻质隔墙自重(2.0kN/m2)活荷载取值(2.0kN/m2) 2.0 2.0 2.0 (3)对于住宅和办公的屋面,如没有特殊保温防水做法要求,一般屋面恒荷载在4.0 kN/m2左右,与实际不会有太大出入;对于屋面活荷载,不上人时0.5 kN/m2,上人时为2.0 kN/m2。 1.2.3 “次要让位于主要”的原则—明确哪些钢筋的位置对结构设计来说更重要 1.3.1 钢筋的三种连接方式—焊接、搭接、机械连接“孰优孰劣” 对于结构重要的部位,《高层建筑混凝土结构技术规程》(JGJ3-2002)规定钢筋的连接宜采用机械连接,而之前规范规定为焊接,改的原因是焊接会使被焊钢筋变脆,在抗震的重要部位,反而变成了“最坏”的做法。 机械连接分为邓强连接和不等强连接,I级为等强连接,II、III级则为不等强连接,主要是针对“钢筋接头处的强度是否大于钢筋母材强度”而言的。 设计可依据《钢筋机械连接通用技术规程》(JGJ 107-2003)中相关的规定,选择与受力情况相匹配的接头。 I级接头:套筒挤压、镦粗接头、剥肋滚螺纹。 剪力墙之水平与竖向分布筋,因钢筋较细,不是抗震的关键部位,适合采用搭接的方式,

不宜采用机械接头。 搭接接头应满足: (1)选择正确的搭接部位; (2)有足够的搭接长度; (3)搭接部位的箍筋间距加密至满足要求。 (4)有足够的混凝土强度与足够的保护层厚度。 如能满足这4款要求,搭接是一种比较好接头方式,而且往往是最省工的方法。但其缺点: (1)在抗震构件的内力较大部位,当构件承受反复荷载时,有滑动的可能; (2)在构件钢筋较密集时,采用搭接方法将使浇捣混凝土较为困难。 当受拉钢筋直径大于28mm,受压钢筋直径大于32mm时,不宜采用搭接。

心理学与生活读书笔记

心理学与生活读书笔记 《心理学与生活》是美国著名心理学家理查德?格里格和菲利普?津巴多写的一本经典的心理学课本,全书主要讲的是心理学与人们日常生活的关系。全书一共分为了18个章节: 第一章是生活中的心理学,主要讲的是心理学的定义以及现代心理学的发展状况; 第二章是心理学的研究方法; 第三章至第六章主要讲的就是感觉、知觉、行为上的心理学基础; 第七章至第十章主要讲的是教学心理学的内容; 第十一章至第十四章,主要讲的是在人本省存在的心理学特性;第十五章至第十六章主要讲的是心理障碍和心理治疗的内容;第十七章至第十八章主要讲的是社会人际交往关系之中的心理学。 阅读了《心理学与生活》的部分章节后,我可以感受到生活低位每一个地方都是充满着心理学知识的,心理学真的和我们的日常生活是息息相关的,运用好了心理学的知识,我们就能够更加有效的掌控我们自己的生活。通过对第一章详细的阅读和理解,我认为当代心理学有以下观点:生物学观点: 引导心理学家在基因大脑、神经系统及内分泌系统中寻

找行为的原因。生物学观点引导心理学家在基因、大脑、神经系统以及内分泌系统中寻找行为的原因。一个器官的功能由其身体结构和生物化学过程来解释。体验和行为在很大程度上被理解为在神经细胞内部和之间发生的化学和电活动的结果。 心理动力学观点: 这种观点认为,人的行为是从继承来的本能和生物驱力中产生的,而且试图解决个人需要和社会要求之间的冲突。理动力学的动机原则是由维也纳的医生弗洛伊德在19世纪末和20世纪初最完整地发展起来的。弗洛伊德的思想是从对精神病人临床工作中得出来的,但是他相信他观察到的这些原则能同时应用在正常行为和变态行为上。弗洛伊德的心理动力学理论把人看做是由内部和外部力量组成的一个复杂网络所推动的。弗洛伊德的模型第一次承认了人的天性并不总是理性的,行为有可能是被不在意识范围内的动机所驱使。弗洛伊德之后的许多心理学家都在新的方向上采用了心理动力学模型。 行为主义观点: 寻求理解特定的环境剌激如何控制特定类型的行为。行为主义对后来的心理学研究有着重要的影响:它对严格的实验和仔细定义的变量的强调,影响了心理学的大多数领域。尽管行为主义者使用非人动物进行了大量实验,行为主义的

相关文档
最新文档