nop指令的作用:

1)就是通过nop指令的填充(nop指令一个字节),使指令按字对齐,从而减少取指令时的内存访问次数。(一般用来内存地址偶数对齐,比如有一条指令,占3字节,这时候使用nop指令,cpu 就可以从第四个字节处读取指令了。)

2)通过nop指令产生一定的延迟,但是对于快速的CPU来说效果不明显,可以使用rep前缀,多延迟几个时钟;-->具体应该说是占用了3个时钟脉冲! 3)i/o传输时,也会用一下 nop,等待缓冲区清空,总线恢复;  4)清除由上一个算术逻辑指令设置的flag位;  5)破解:)对于原程序中验证部分使用nop来填充,使验证失效;  6)有一个朋友说的比较厉害--在航天飞机控制程序中防止程序跳飞!  解释如下:在空间放射性环境下,放射性子粒很容易使内存位元改变(呵呵,有点基因突变的感觉),这样如果改变的是jump,call指令的存贮位置的话,就会导致程序跳转到一个不可以预置的位置,对于关键系统来说的确是灾难性的。所以就在被调用程序之前填充nop指令,这样即使跳转到稍前或者稍后的位置,也不会造成影响。  这让我想起《C Traps and Pitfalls》中举的那个导弹软件中的致命错误:因为导弹是以0.1s为单位进行记时的,但是由于浮点数没有办法精确的表示0.1,造成了舍尾误差,这个误差在导弹开启3天的之后逐渐的积累,结果误差了一秒。

 

以下来自http://wapedia.mobi/zh/NOP

计算机科学中,NOP或NOOP(No Operation或No Operation Performed的缩写,意为无操作)是汇编语言的一个指令,一系列编程语句,或网络传输协议中的表示不做任何有效操作的命令。

目录: 1. NOP机器指令 2. NOP代码 3. NOP协议命令 4. 破解 5. 安全问题 6. 参见 7. 参考文献

1. NOP机器指令

有的计算机指令集包含一条指令,其主要目的是不改变任何程序可访问的寄存器,处理器状态标志或主存,而且可能需要特定的时钟周期来执行。在其它指令集中,NOP是用执行一条具有操作数,具有相同效果的指令来模拟的(例如SPARC处理器推荐使用sethi 0, %g0模拟NOP)。

NOP指令通常用于控制时序的目的,强制内存对齐,防止流水线灾难(en:Hazard (computer architecture)),占据分支指令造成的延迟(delay slot),或是作为占位符以供程序的改善(或替代被移除的指令)。在某些情况中,NOP指令会产生副作用;例如在摩托罗拉 68000处理器中,NOP操作码会产生流水线同步。

下表显示了部分CPU架构上NOP指令的特征:

CPU架构

助忆码

字长

操作码

备注

Intelx86系列CPU

NOP

1; i686中为1-9

0x90; 0x0f 0x1f [2]

x86 CPU上的NOP指令实质上是XCHG EAX, EAX(操作码同为0x90)--无任何作用的指令。

Intel 8051 /MCS-51系列

NOP

1

0x00

 

MIPS

NOP

4

0x00000000

 

MOS科技 65xx

NOP

1

0xea

65C02处理器发布时,之前多数的无效指令都被定义成了具有不同字长和需时的NOP指令。

PowerPC

NOP

4

0x60000000 (ori r0,r0,0的扩展操作码)

 

2. NOP代码

NOP有时可以描述函数或一系列编程语句的作用,若部分没有作用(也可以称为冗余代码)。常见的编译器优化的作用就包括检测和去除这样的代码。

下面是一个起NOP作用的C语言语句的例子(评判标准在于语句是否影响程序输出,而非编译器是否为语句产生代码): <source lang="C">

i+1;

</source> (该语句执行了一个加法,但结果被丢弃。)

C语言中最简单的NOP块被称为空语句;其只包括一个分号。(标准没有要求编译器在这个例子中生成NOP指令;通常这个语句会直接为编译器所忽略。) <source lang="C">

;

</source>

虽然空语句自身没有用处,但在某些情况下可以启动占位符的作用,例如在循环中: <source lang="C">

while (ReadChar() != '/n') ;

</source>

以上代码一直调用ReadChar函数,直到函数返回一个/n(NL,新行)字符。

Python中的pass语句不会产生作用,可以作为NOP使用。它的主要目的是保证语法正确,由于Python的缩进敏感语法。

3. NOP协议命令

许多协议,比如telnet,包含NOP指令,该指令允许客户端可以在不会引起其它操作的情况下向服务器请求回应。NOP指令可以用于检测连接是否断开,或服务器是否可以响应操作。下列协议中包含NOOP指令(不完全列表):

· telnet

· FTP

· SMTP

· X11

· POP3

· NNTP

· finger

· IMAP4

· BitTorrent

注意:与其它协议不同,IMAP4的NOP命令允许客户端响应服务器发送由其它客户端反应的操作信息。

虽然大多数telnet和FTP服务器用OK或+OK回应NOOP指令,有的程序员在对客户端的回应中加入了特别的内容。例如MINIX的ftpd守护进程会以以下消息回应NOOP:[3]

[[FTP服务器返回值列表|200]] NOOP to you too!

4. 破解

NOP通常在破解软件时有特殊用途,例如检查序列号,特定硬件或软件需求,加密狗等的软件。这是通过更改函数和/或子程序以跳过安全检查,直接返回期望的检测值实现的。由于大多数安全检查子程序中的指令会被废弃,它们会被NOP所代替。

5. 安全问题

NOP操作码可以被用于组成一个NOP slide,允许在指令指针值未定义时执行代码,例如缓存溢出导致栈上的函数返回地址被更改。

6. 参见

· 计算机系统结构

· HLT

· 指令集

· x86

· 恒等函数,函数式编程语言中NOOP的等效函数

· xyzzy,一个有时用来代替NOOP的命令

7. 参考文献

 

1 ^ Motorola 68000 Programmer's Reference Manual.

2 ^ Intel Architecture Software Developer's Manual, Volume 2: Instruction Set Reference Manual [2007-07-13].
16进制机器码   x86汇编指令   指令意义   可能影响的寄存器或标志位  --------------   -------------   -------------------   ---------------------------  06   PUSHL   %es   es进栈   esp  0E   PUSHL   %cs   cs进栈   esp  16   PUSHL   %ss   ss进栈   esp  1E   PUSHL   %ds   ds进栈   esp  27   DAA   加法小数位调整   AF   CF   PF   SF   ZF   AL  2F   DAS   减法小数位调整   AF   CF   PF   SF   ZF   AL  37   AAA   加法的ASCII调整   AF   CF   AL  3F   AAS   减法小数位调整   AF   CF   AL  40   INC   %eax   %eax加1   AF   OF   PF   SF   ZF   eax  41   INC   %ecx   %ecx加1   AF   OF   PF   SF   ZF   ecx  42   INC   %edx   %edx加1   AF   OF   PF   SF   ZF   edx    43   INC   %ebx   %ebx加1   AF   OF   PF   SF   ZF   ebx  44   INC   %esp   %esp加1   AF   OF   PF   SF   ZF   esp  45   INC   %ebp   %ebp加1   AF   OF   PF   SF   ZF   ebp  46   INC   %esi   %esi加1   AF   OF   PF   SF   ZF   esi  47   INC   %edi   %edi加1   AF   OF   PF   SF   ZF   edi  48   DEC   %eax   %eax减1   AF   OF   PF   SF   ZF   eax  49   DEC   %ecx   %ecx减1   AF   OF   PF   SF   ZF   ecx  4A   DEC   %edx   %edx减1   AF   OF   PF   SF   ZF   edx  4B   DEC   %ebx   %ebx减1   AF   OF   PF   SF   ZF   ebx  4C   DEC   %esp   %esp减1   AF   OF   PF   SF   ZF   esp  4D   DEC   %ebp   %ebp减1   AF   OF   PF   SF   ZF   ebp  4E   DEC   %esi   %esi减1   AF   OF   PF   SF   ZF   esi  4F   DEC   %edi   %edi减1   AF   OF   PF   SF   ZF   edi  50   PUSHL   %eax   eax进栈   esp  51   PUSHL   %ecx   ecx进栈   esp  52   PUSHL   %edx   edx进栈   esp  53   PUSHL   %ebx   ebx进栈   esp  54   PUSHL   %esp   esp进栈   esp  55   PUSHL   %ebp   ebp进栈   esp  56   PUSHL   %esi   esi进栈   esp  57   PUSHL   %edi   edi进栈   esp  90   NOP   (NULL)   (NULL)  91   XCHG   %ecx,%eax   交换寄存器内容   eax,ecx  92   XCHG   %edx,%eax   交换寄存器内容   edx,eax  93   XCHG   %ebx,%eax   交换寄存器内容   ebx,eax  95   XCHG   %ebp,%eax   交换寄存器内容   ebp,eax  96   XCHG   %esi,%eax   交换寄存器内容   esi,eax  97   XCHG   %edi,%eax   交换寄存器内容   edi,eax  98   CBW   将byte的AL转换成word的EAX   EAX  9B   WAIT   等待CPU处理完数据   (NULL)  D6   无效指令   (NULL)   (NULL)  F5   CMC   转换CF标志位(开关)   CF  F8   CLC   清CF位(CF=0)   CF  F9   STC   设置CF位(CF=1)   CF  FC   CLD   设置DF位(DF=1)   DF  FD   STD   清理DF位(DF=0)   DF 
1.   上面利用XCHG/PUSHL/INC/DEC的方法程序应该不会出错, 可以正常到目的,   但寄存器内容被改变了.inc  eax就改变了eax的值, 只能算无奈的办法.  2.   利用改变标志寄存器位是个不错的想法,   基本上不会影响流程,   但看到还是改变了CPU的东西还是不满意.  3.   /x90(NOP),/x9b(wait),/xd6(bad)   这三个指令不错,   都不会改变程序的流程,   又不会改变寄存器的东东.  这里尤其指明的是/xd6指令,   在intel手册上没查到对应什么指令,   但在linux下和windows下发现系统对于这个是继续  执行下一条指令,和NOP相似.  在我看来,上面这些指令利用顺序优先级最好是: 
/x90(NOP)   >   /xd6   >   /x9b   >   改变标志寄存器的操作指令   >   INC/DEC/PUSHL/XCHG 

posted @ 2012-06-04 06:33 Zealtim Leo 阅读(11) 评论(0) 编辑

sql server 重命名表字段

用sp_rename系统存储过程  重命名列  下例将表   customers   中的列   contact   title   重命名为   title。

EXEC   sp_rename   'customers.[contact   title] ',   'title ',   'COLUMN '

posted @ 2012-05-25 20:18 Zealtim Leo 阅读(1) 评论(0) 编辑

mysql 为例:

显示表结构 describe jin;

将表jin重命名为chun

 

rename table jin to chun;

 

或者

 

alter table jin rename to chun;

 

 

重命名列 --要列出列的类型, column可有可无

alter table jin change column  name pass varchar(50);

 

检索表

 

show tables like 'jin%'

 

 

同一数据库里的table1表的内容导入到table2中?

 

insert into table2 select * from table1;

 

 

 

##mysql重命名表,建立外键,增、删、改列名实例

##增加到某个字段之后 alter table tb_nippon_mms_info add province varchar(50) default null after retCode; alter table tb_nippon_mms_info add city varchar(50) default null after province;

##增加到某个字段之前 alter table tb_nippon_mms_info add province varchar(50) default null before retCode; alter table tb_nippon_mms_info add city varchar(50) default null before province;

##删除名字为states的列 alter table tb_nine_integral_mo_info drop column states ;

##改变手机号码字段为约束键 alter table business.tb_nine_ticket_popedom change phone phone varchar(50) not null unique;

##改变列名flag为states alter table tb_nine change flag states tinyint(1);

–重命名表 rename table t_softwareport to software_port;

–建立外键 alter table software_port add constraint fk_software_port_softwareprocessid foreign key (softwareprocessid) references software_process (id) on delete restrict on update restrict;

 

 

 

 

posted @ 2012-05-25 20:12 Zealtim Leo 阅读(3) 评论(0) 编辑

关系表的级联更新: on update cascade

on delete cascade 是级联删除的意思

意思是 当你更新或删除主键表时,那么外键表也会跟随一起更新或删除

CREATE TABLE Countries(CountryId INT PRIMARY KEY)
INSERT INTO Countries (CountryId) VALUES (1)
INSERT INTO Countries (CountryId) VALUES (2)
INSERT INTO Countries (CountryId) VALUES (3)
GO
CREATE TABLE Cities( CityId INT PRIMARY KEY ,CountryId INT REFERENCES Countries ON DELETE CASCADE);
INSERT INTO Cities VALUES(1,1)
INSERT INTO Cities VALUES(2,1)
INSERT INTO Cities VALUES(3,2)
GO
CREATE TABLE Buyers(CustomerId INT PRIMARY KEY ,CityId INT REFERENCES Cities ON DELETE CASCADE);
INSERT INTO Buyers VALUES(1,1),
INSERT INTO Buyers VALUES(2,1)
INSERT INTO Buyers VALUES(3,2)
GO

命令:
DELETE FROM Countries WHERE CountryId = 1
结果:
Countries:
CountryId
2
3
Cities:
CityId CountryId
3 2
Buyers:
CustomerId CityId

ON UPDATE CASCADE的用法和ON DELETE CASCADE差不多

posted @ 2012-05-25 03:13 Zealtim Leo 阅读(9) 评论(0) 编辑
SQL Server 2005
 
 
 
 
3(共 7)对本文的评价是有帮助 - 评价此主题
 

 

外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。

在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这个列就成为第二个表的外键。

例如,因为销售订单和销售人员之间存在一种逻辑关系,所以 AdventureWorks 数据库中的 Sales.SalesOrderHeader 表含有一个指向 Sales.SalesPerson 表的链接。SalesOrderHeader 表中的 SalesPersonID 列与 SalesPerson 表中的主键列相对应。SalesOrderHeader 表中的 SalesPersonID 列是指向 SalesPerson 表的外键。

SalesOrderHeader.SalesPersonID 为外键。

FOREIGN KEY 约束并不仅仅可以与另一表的 PRIMARY KEY 约束相链接,它还可以定义为引用另一表的 UNIQUE 约束。FOREIGN KEY 约束可以包含空值,但是,如果任何组合 FOREIGN KEY 约束的列包含空值,则将跳过组成 FOREIGN KEY 约束的所有值的验证。若要确保验证了组合 FOREIGN KEY 约束的所有值,请将所有参与列指定为 NOT NULL。

ms175464.note(zh-cn,SQL.90).gif注意:
FOREIGN KEY 约束可以引用同一数据库的表中的列或同一表中的列。这些称为“自引用”表。例如,请考虑包含三列的一个雇员表:employee_numberemployee_name manager_employee_number。由于经理本身也是雇员,所以从 manager_employee_number 列到 employee_number 列存在外键关系。

 

 

尽管 FOREIGN KEY 约束的主要目的是控制可以存储在外键表中的数据,但它还可以控制对主键表中数据的更改。例如,如果在 Sales.SalesPerson 表中删除一个销售人员行,而这个销售人员的 ID 由 Sales.SalesOrderHeader 表中的销售订单使用,则这两个表之间关联的完整性将被破坏;SalesOrderHeader 表中删除的销售人员的销售订单因为与SalesPerson 表中的数据没有链接而变得孤立了。

FOREIGN KEY 约束防止这种情况的发生。如果主键表中数据的更改使之与外键表中数据的链接失效,则这种更改将无法实现,从而确保了引用完整性。如果试图删除主键表中的行或更改主键值,而该主键值与另一个表的 FOREIGN KEY 约束中的值相对应,则该操作将失败。若要成功更改或删除 FOREIGN KEY 约束的行,必须先在外键表中删除或更改外键数据,这将把外键链接到不同的主键数据上去。

由于以下原因,对外键创建索引通常是有用的:

  • 对 PRIMARY KEY 约束的更改可由相关表中的 FOREIGN KEY 约束检查。
  • 当在查询中组合相关表中的数据时,经常在联接条件中使用外键列,方法是将一个表的 FOREIGN KEY 约束中的列与另一个表中的主键列或唯一键列匹配。索引使 SQL Server 2005 数据库引擎 可以在外键表中快速查找相关数据。但是,创建此索引并不是必需的。即使没有对两个相关表定义 PRIMARY KEY 或 FOREIGN KEY 约束,也可以对来自这两个表中的数据进行组合,但两个表间的外键关系说明已用其键作为条件对其进行了优化,以便组合到查询中。有关在联接中使用 FOREIGN KEY 约束的详细信息,请参阅联接基础知识查询类型和索引

SQL Server 对一个表可以包含的 FOREIGN KEY 约束(引用其他表)数没有预定义限制,对引用特定表的其他表所拥有的 FOREIGN KEY 约束数也没有预定义的限制。但是,实际的 FOREIGN KEY 约束数会受到硬件配置以及数据库和应用程序的设计的限制。建议表中包含的 FOREIGN KEY 约束不要超过 253 个,并且引用该表的 FOREIGN KEY 约束也不要超过 253 个。在设计数据库和应用程序时应考虑强制 FOREIGN KEY 约束的开销。

 
posted @ 2012-05-22 18:55 Zealtim Leo 阅读(4) 评论(0) 编辑

1.--区分大小写

--注意:"collate Chinese_PRC_CS_AI"要放在字符串条件后面select*from a where col=’AbCdE’ collate Chinese_PRC_CS_AI and Id>10--区分大小写 select*from a where col=’abCdE’ collate Chinese_PRC_CI_AI and Id>10--不区分大小写

 

2.如果想让服务器上所有的存储表都区分大小写就需要在安装服务器时设置服务器的排序规则 博客园 或者 运行
alter database testgrass collate Chinese_PRC_CS_AI
3.如果修改整个服务器的默认排序规则,用Rebuildm.exe重建master库
SQL Server\\80\\Tools\\Binn\\rebuildm.exe
4.修改某一列大小写区分
1).先打开oblog数据库的oblog_user表,右键点击,选设计表
2).找到username字段
3).然后找到下面的排序规则
4).在弹出的对话框中选择区分大小写
参考:
我们在create table时经常会碰到这样的语句,例如:
password nvarchar(10)collate chinese_prc_ci_as null,
那它到底是什么意思呢?不妨看看下面:
首先,collate是一个子句,可应用于数据库定义或列定义以定义排序规则,或应用于字符串表达式以应用排序规则投影。语法是:
collate collation_name
collation_name ::={windows_collation_name}|{sql_collation_name}
参数collate_name是应用于表达式、列定义或数据库定义的排序规则的名称。collation_name 可以只是指定的 Windows_collation_name 或SQL_collation_name。
Windows_collation_name 是 Windows 排序规则的排序规则名称。参见 Windows 排序规则名称。
SQL_collation_name 是 SQL 排序规则的排序规则名称。参见 SQL 排序规则名称。
下面简单介绍一下排序规则:
什么叫排序规则呢?MS是这样描述的:\"在 Microsoft SQL Server 2000 中,字符串的物理存储由排序规则控制。排序规则指定表示每个字符的位模式以及存储和比较字符所使用的规则。\"
在查询分析器内执行下面语句,可以得到SQL SERVER支持的所有排序规则。
select * from ::fn_helpcollations()
排序规则名称由两部份构成,前半部份是指本排序规则所支持的字符集。如:
Chinese_PRC_CS_AI_WS
前半部份:指UNICODE字符集,Chinese_PRC_指针对大陆简体字UNICODE的排序规则。
排序规则的后半部份即后缀 含义:
_BIN 二进制排序
_CI(CS) 是否区分大小写,CI不区分,CS区分
_AI(AS) 是否区分重音,AI不区分,AS区分
_KI(KS) 是否区分假名类型,KI不区分,KS区分  [Page]
_WI(WS) 是否区分宽度 WI不区分,WS区分
区分大小写:如果想让比较将大写字母和小写字母视为不等,请选择该选项。
区分重音:如果想让比较将重音和非重音字母视为不等,请选择该选项。如果选择该选项,比较还将重音不同的字母视为不等。
区分假名:如果想让比较将片假名和平假名日语音节视为不等,请选择该选项。
区分宽度:如果想让比较将半角字符和全角字符视为不等,请选择该选项。
原文地址:http://www.evget.com/zh-CN/Info/ReadInfo.aspx?id=9219

posted @ 2012-05-22 04:35 Zealtim Leo 阅读(9) 评论(0) 编辑

搜索算法按搜索的方式分有两类,一类是深度优先搜索,一类是广度优先搜索。我们知道,深度搜索编程简单,程序简洁易懂,空间需求也比较低,但是这种方法的 时间复杂度往往是指数级的,倘若不加优化,其时间效率简直无法忍受;而广度优先搜索虽然时间复杂度比前者低一些,但其庞大的空间需求量又往往让人望而却步。 所以,对程序进行优化,就成为搜索算法编程中最关键的一环。本文所要讨论的便是搜索算法中优化程序的一种基本方法叫“剪枝”。 一、what is it?       搜索的进程可以看作是从树根出发,遍历一棵倒置的树——搜索树的过程。而所谓剪枝,顾名思义,就是通过某种判断,避免一些不必要的遍历过程,形象的说,就是剪去了搜索树中的某些“枝条”,故称剪枝。应用剪枝优化的核心问题是设计剪枝判断方法,即确定哪些枝条应当舍弃,哪些枝条应当保留的方法。 二、剪枝的原则 原则之一:正确性。    因为它能够“剪去”搜索树中的一些“枝条”。然而,如果在剪枝的时候,将“长有”我们所需要的解的枝条也剪掉了,那么,一切优化也就都失去了意义。所以,对剪枝的第一个要求就是正确性,即必须保证不丢失正确的结果,这是剪枝优化的前提。我们利用“必要条件”来进行剪枝判断。也就是说,通过解所必须具备的特征、必须满足的条件等方面来考察待判断的枝条能否被剪枝。这样,就可以保证所剪掉的枝条一定不是正解所在的枝条。 原则之二:准确性。 即能够尽可能多的剪去不能通向正解的枝条。准确性可以说是剪枝优化的生命。 原则之三:高效性。 经常还需要提高判断操作本身的时间效率。 综上所述,我们可以把剪枝优化的主要原则归结为六个字:正确、准确、高效。 我们可以把常用的剪枝判断大致分成以下两类: 可行性剪枝。 最优性剪枝(上下界剪枝)。 三、可行性剪枝 搜索过程可以看作是对一棵树的遍历。在很多情况下,并不是搜索树中的所有枝条都能通向我们需要的结果,很多的枝条实际上只是一些死胡同。如果我们能够在刚刚进入这样的死胡同的时候,就能够判断出来并立即剪枝,程序的效率往往会得到提高。而所谓可行性剪枝,正是基于这样一种考虑。 下面我们举一个例子——Betsy的旅行(USACO)。 题目简述:一个正方形的小镇被分成N的平方个小方格,Betsy要从左上角的方格到达左下角的方格,并且经过每个方格恰好一次。编程对于给定的N,计算出Betsy能采用的所有的旅行路线的数目。 我们用深度优先的回溯方法来解决这个问题:Betsy从左上角出发,每一步可以从一个格子移动到相邻的没有到过的格子中,遇到死胡同则回溯,当移动了N2-1步并达到左下角时,即得到了一条新的路径,继续回溯搜索,直至遍历完所有道路。 但是,仅仅依照上述算法框架编程,时间效率极低,对N=6的情况无法很好的解决,所以,优化势在必行。对本题优化的关键就在于当搜索到某一个步骤时,能够提前判断出在后面的搜索过程中是否一定会遇到死胡同,而可行性剪枝正可以在这里派上用场。 我们首先从“必要条件”,即合法的解所应当具备的特征的角度分析剪枝的方法,主要有两个方向:对于一条合法的路径,除出发点和目标格子外,每一个中间格子都必然有“一进一出”的过程。所以在搜索过程中,必须保证每个尚未经过的可格子都与至少两个尚未经过的格子相邻(除非当时Betsy就在它旁边)。这里,我们是从微观的角度分析问题。 在第一个条件的基础上,我们还可以从宏观的角度分析,进一步提高剪枝判断的准确性。显然,在一个合法的移动方案的任何时刻,都不可能有孤立的区域存在。虽然孤立区域中的每一个格子也可能都有至少两个相邻的空的格子,但它们作为一个整体,Betsy已经不能达到。我们也应当及时判断出这种情况,并避免之。 以上两个剪枝判断条件都是正确的,其准确度也比较高。但是,仅仅满足这两点还不够,剪枝判断的操作过程还必须力求高效。假如我们在每次剪枝判断时,都简单的对N2个格子进行一遍扫描,其效率的低下可想而知。因此,我们必须尽可能的简化判断的过程。 实际上,由于Betsy的每一次移动,只会影响到附近的格子,所以每次执行剪枝判断时,应当只对她附近的格子进行检查:对于第一个剪枝条件,我们可以设一个整型标志数组,分别保存与每个格子相邻的没被经过的格子的数目,Betsy每次移动到一个新位置,都只会使与之相邻的至多4个格子的标志值发生变化,只要检查它们的标志值即可。而对于第二个剪枝条件,处理就稍稍麻烦一些。但我们仍然可以使用局部分析的方法,即只通过对Betsy附近的格子进行判断,就确定是否应当剪枝,下图简要说明了剪枝的原理: 1、搜索算法的剪枝优化 - 墨涵 - 墨涵天地

上图给出了可以剪枝的三种情况。由于Betsy到过的所有格子都一定是四连通的,所以每种情况下的两个白色的格子之间必定是不连通的,它们当中必然至少有一个是属于某个孤立区域的,都一定可以剪枝。 经过上述的优化,程序的时间效率有了很大的提高        在应用可行性剪枝的时候,首先要多角度全面分析问题的特点(本题就是从微观和宏观两个角度设计剪枝方法),找到尽可能多的可以剪枝的情况;同时,还必须注意提高剪枝的时间效率,所以我们使用了“局部判断”的方法,特别是在处理第二个剪枝条件时,更是通过局部判断来体现整体性质(是否有孤立区域),这一技巧不仅在设计剪枝方法的时候能够发挥作用,在其他方面也有着极为广泛的应用。 四 、最优性剪枝        在我们平时遇到的问题中,有一大类是所谓最优化问题,即所要求的结果是最优解。如果我们使用搜索方法来解决这类问题,那么,最优性剪枝是一定要考虑到的。       首先要作一些说明:我们知道,解的优劣一般是通过一个评价函数来评判的。这里定义一个抽象的评价函数——“优度”,它的值越大,对应的解也就越优(对于具体的问题,我们可以认为“优度”代表正的收益或负的代价等)。 然后,我们再来回顾一下搜索最优解的过程:一般情况下,我们需要保存一个“当前最优解”,实际上就是保存解的优度的一个下界。在遍历到搜索树的叶子节点的时候,我们就能得到一个新的解,当然也就得到了它的评价函数值,与保存的优度的下界作比较,如果新解的优度值更大,则这个优度值就成为新的下界。搜索结束后,所保存的解就是最优解。 那么,最优性剪枝又是如何进行的呢?当我们处在搜索树的枝条上时,可以通过某种方法估算出该枝条上的所有解的评价函数的上界,即所谓估价函数。显然,大于当前保存的优度的下界,是该枝条上存在最优解的必要条件,否则就一定可以剪枝。所以,最优性剪枝也可以称为“上下界剪枝”。同时,我们也可以看到,最优性剪枝的核心问题就是估价函数的建立。

posted @ 2012-05-05 23:46 Zealtim Leo 阅读(11) 评论(0) 编辑

|                                                            | |    正在安装 Apache ...                                     | [Tue Dec 11 22:13:09 2007] [error] Apache_pn: Service is already installed. |    安装 Apache 服务失败!                                   | |    服务名 [ Apache_pn ] 已存在.                            | |    如果安装过 PHPnow, 请卸载或者使用不同的端口和服务名.    | |____________________________________________________________| 怎么卸载Apache_pn服务

解决方法:
如果是 1.4.2 进入 PnCmds 目录下,执行 “绝对强制卸载.cmd” 就可以卸载了。
如果是 1.4.1 解压新的 PHPnow 到任一目录。 执行 PnCp.cmd; 输入 19 回车进入 PHPnow 目录下的命令行模式; 复制、粘贴 并执行下面命令: ren PnCmds\*.cm_ *.cmd PnCmds\Stop.cmd

posted @ 2012-04-24 22:49 Zealtim Leo 阅读(4) 评论(0) 编辑

在开发android的UI 界面时总是遇到

android The project target (Android 2.3.3) was not properly loaded

这是你在更新sdk时没有删除老的版本 ,两种方法:第一种是再SDK目录删除temp目录这个文件夹,第二种是,如果SDK目录下没有temp文件夹,就到eclipse/plugins 目录下把所有文件名里有0.8的jar包删掉,删掉之后就可以在xml界面的graphical layout中看到布局的预览

 

 

还有问题是 看不到界面,这时就需要你更新sdk的Tools包Android SDK Platform-tools

posted @ 2012-04-24 16:01 Zealtim Leo 阅读(9) 评论(0) 编辑

(1) win7 wifi 如何将模式802.11n改成802.11g

右键桌面右下角的网络图标———打开网络和共享中心——更改适配器设置(左上角)——右键无线网络连接——属性——配置——高级——选择“信道802.11g”。
OK,解决~~~~~

(2) 关于android系统无法识别连接笔记本win7建立的wifi热点 问题的解决方案

首先,手机上搜索不到win7共享的wifi是因为那根本不是真正的无线ap,只是win7自己系统范围内共享的wifi,是win7专用的,即使电脑上装xp也是搜索不到的,
如果不用无线路由器,非要用笔记本共享wifi上网的话,解决办法有二:
1、电脑上先升级你的网卡驱动,下载驱动时候可以到微软官网上去找自己网卡对应的驱动,看看是否支持mywifi,如果支持的话就下载过来,在安装时候选择自定义,然后在最下面的打红叉的地方都选择上(去掉红叉)<默认的是不安装mywifi的>,继续安装,好了以后重启,就可以看到状态栏右下角多出个图标来,点进去选择启动,然后配置式,建立自己的mywifi
2、可以试试打开开始菜单,附件,右键以管理员身份运行命令提示符,输入netsh
wlan set hostednetwork mode=allow ssid="这里自己随便给WIFI接入点去个名称"
key="这里是热点的接入密码"
上面那段输完回车,这个时候你看你的网络链接里是不是多了个无线网络连接,如果出现了就证明你的网卡是支持的,没有出现就最好把网卡升级到最新驱动再试试。(mode=后面的allow意思就是启用虚拟无线网卡,改成disallow意思就是禁用虚拟网卡)
如果出现了虚拟的无线网络连接,这时输入:netsh
wlan start hostednetwork,回车后会显示已启动承载网络,这个时候就应该成功了,虚拟无线AP就建立好了。(把netsh
wlan后面的start改成stop就是停用虚拟无线AP)

最后,应该你是通过本地连接上互联网的吧,这个时候你就把本地连接internet连接共享给刚才出现的那个虚拟无线网卡,注意不要选错了。

顺便提醒一下:如果连接好了的话,笔记本或者无线路由器的wifi模式里面记得要选择g或者b模式,g模式会快好多,尽量不要选a/b/g/或者b/g/n混合模式,因为手机本身支持wifi模式的原因,混合模式能够连接上,但是会出现开始能打开网页什么的,一会儿就打不开了,有好多人遇到这个问题,都不知道怎么原因


如果还是不行的话,就从网上下载个htcsync,安装后数据线连接电脑,手机上选电脑共享上网模式(最后一项),要不然就连接你的无线路由器把,没别的办法的了,楼主好运了!!!



还有个办法就是下载装个Connectify软件,选择ap模式就好了,这个最简单了,应该什么笔记本都支持的

(3)手机设置静态网址!

[资料] S510e G12 连接win7虚拟的wifi热点上网http://bbs.hiapk.com/thread-1374857-1-1.html 

(4) 命令行+Virtual Router Manager(完美解决!!!):

如果要建立wifi热点,必须是win7系统,不需要connectify也不需要Bzeek,那两个都试过,比较麻烦。本人推荐傻瓜式建立wifi热点软件Virtual Router Manager,用了你就知道,一键就可以建立wifi热点,非常简单。
如果需要软件,我可以发给你。

因为Virtual Router Manager建立的wifi热点的默认IP是192.168.137.1
所以手机的wifi设置里静态IP应该设成:
IP:192.168.137.X (X是2-255的任意数字,不能和电脑的重复)
网络掩码:255.255.255.0
网关和DNS都设成192.168.137.1

posted @ 2012-04-24 14:07 Zealtim Leo 阅读(17) 评论(0) 编辑