中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » 网络日志(Blog) » 1DOS学习中的文章展开,方便阅读。(20160203)
« [1] [2] [3] [4] [5] [6] »
作者:
标题: 1DOS学习中的文章展开,方便阅读。(20160203) 上一主题 | 下一主题
zzz19760225
超级版主




积分 3673
发帖 2020
注册 2016-2-1
状态 离线
『第 76 楼』:  

我是一个线程 2016-03-30 IBM刘欣 程序猿
  
我是一个线程, 我一出生就被编了个号: 0x3704,  然后被领到一个昏暗的屋子里,  
这里我发现了很多和我一模一样的同伴。
  
我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说:
  
我们线程的宿命就是处理包裹。 把包裹处理完以后还得马上回到这里,否则可能永远
回不来了。
  
  
我一脸懵懂,包裹,什么包裹?
  
”不要着急,马上你就会明白了, 我们这里是不养闲人的。“
  
果然,没多久,屋子的门开了, 一个面貌凶恶的家伙吼道:  
  
"0x3704 ,出来!"
  
我一出来就被塞了一个沉甸甸的包裹,上面还有附带着一个写满了操作步骤的纸。  
  
"快去,把这个包裹处理了。"
  
"去哪儿处理"
  
"跟着指示走, 先到就绪车间"
  
  
果然,地上有指示箭头,跟着它来到了一间明亮的大屋子,这里已经有不少线程了,  
大家都很紧张,好像时刻准备着往前冲。
  
  
我刚一进来,就听见广播说:“0x3704, 进入车间”
  
  
我赶紧往前走, 身后很多人议论说:
  
  
”他太幸运了, 刚进入就绪状态就能运行“
  
”是不是有关系?“  
  
”不是,你看人家的优先级多高啊, 唉“
  
  
前边就是车间, 这里简直是太美了, 怪不得老线程总是唠叨着说:要是能一直待在这
里就好了。  
  
  
这里空间大,视野好,空气清新,鸟语花香,还有很多从来没见过的人,像服务员一样
等着为我服务。  
  
  
他们也都有编号, 更重要的是每个人还有个标签,上面写着:硬盘,数据库,内存,
网卡...
  
  
我现在理解不了,看看操作步骤吧:
  
  
第一步:从包裹中取出参数  
  
  
打开包裹, 里边有个HttpRequest  对象, 可以取到 userName, password两个参数
  
  
第二步:执行登录操作
  
  
奥,原来是有人要登录啊,我把userName/password 交给 数据库服务员,他拿着数据
, 慢腾腾的走了。  
  
  
  
他怎么这么慢? 不过我是不是正好可以在车间里多待一会儿? 反正也没法执行第三
步。
  
  
就在这时,车间里的广播响了: 
  
  
"0x3704,  我是CPU , 记住你正在执行的步骤, 马上带包裹离开"
  
我慢腾腾的开始收拾
  
  
”快点, 别的线程马上就要进来了“
  
  
离开这个车间, 又来到一个大屋子,这里很多线程慢腾腾的在喝茶,打牌。
  
”哥们,你们没事干了?“
  
  
”你新来的把, 你不知道我在等数据库服务员给我数据啊! ,据说他们比我们慢好几
十万倍, 在这里好好歇吧“
  
  
”啊? 这么慢?  我这里有人在登录系统, 能等这么长时间吗"
  
  
”放心,你没听说过人间一天, CPU一年吗, 我们这里是用纳秒,毫秒计时的, 人间
等待一秒,相当于我们好几天呢, 来的及“
  
  
干脆睡一会吧 , 不知道过了多久 ,大喇叭又开始广播了:
  
  
"0x3704, 你的数据来了,快去执行”
  
  
我转身就往CPU车间跑,发现这里的们只出不进!
  
  
后面传来阵阵哄笑声:
  
  
”果然是新人, 不知道还得去就绪车间等“
  
  
于是赶紧到就绪车间, 这次没有那么好运了, 等了好久才被再次叫进CPU车间。
  
  
在等待的时候, 我听见有人小声议论:
  
  
”听说了吗,最近有个线程被kill掉了“
  
”为啥啊?“
  
”这家伙赖在CPU车间不走, 把CPU利用率一直搞成100%,后来就被kill掉了“
  
”Kill掉以后弄哪儿去了“
  
”可能被垃圾回收了吧“
  
  
我心里打了个寒噤 ,  赶紧接着处理, 收下的动作块多了,第二步登录成功了
  
  
第三步:构建登录成功后的主页
  
  
这一步有点费时间, 因为有很多HTML需要处理, 不知道代码谁写的,处理起来很烦
人。
  
  
我正在紧张的制作html呢, CPU有开始叫了:
  
  
"0x3704,  我是CPU , 记住你正在执行的步骤, 马上带包裹离开"
  
”为啥啊“
  
”每个线程只能在CPU上运行一段时间,到了时间就得让别人用了, 你去就绪车间待着
, 等着叫你吧“
  
  
就这样, 我一直在就绪-运行 这两个状态,不知道轮转了多少次, 终于安装步骤清单
把工作做完了。
  
  
最后顺利的把包含html的包裹发了回去。
  
  
至于登录以后干什么事儿 , 我就不管了。  
  
  
马上就要回到我那昏暗的房间了, 真有点舍不得这里。
  
  
不过相对于有些线程, 我还是幸运的, 他们运行完以后就彻底的销毁了,而我还活着

  
  
回到了小黑屋, 老线程0x6900 问:
  
  
”怎么样?第一天有什么感觉?“
  
”我们的世界规则很复杂 , 首先你不知道什么时候会被挑中执行;  第二 ,在执行的
过程中随时可能被打断,让出CPU车间;
  
  
   第三,一旦出现硬盘,数据库这样耗时的操作也得让出CPU,去等待;  第四,就是数
据来了,你也不一定马上执行,还得等着CPU挑选“
  
  
”小伙子理解的不错啊“
  
”我不明白为什么很多线程都执行完就死了, 为什么咱们还活着?“
  
”你还不知道, 长生不老是我们的特权, 我们这里有个正式的名称,叫做 线程
池!“
  
  
平淡的日子就这么一天天过去, 作为一个线程, 我每天的生活都是取包裹,处理包裹
,然后回到我们昏暗的家:线程池。
  
  
有一天我回来的时候, 听到有个兄弟说, 今天要好好休息下,明天就是最疯狂的一天
。  
  
  
我看了一眼日历,明天是 11月11号 。  
  
  
果然,零点刚过,不知道那些人类怎么了, 疯狂的投递包裹, 为了应付蜂拥而至的海
量包裹, 线程池里没有一个人能闲下来,全部出去处理包裹,CPU车间利用率超高,硬
盘在嗡嗡转, 网卡疯狂的闪,  即便如此, 还是处理不完,堆积如山。
  
  
我们也没有办法,实在是太多太多了, 这些包裹中大部分都是浏览页面,下订单,买
,买,买。
  
  
不知道过了多久, 包裹山终于慢慢的消失了。
  
  
终于能够喘口气, 我想我永远都不会忘记这一天。
  
  
通过这个事件,我明白了我所处的世界:这是一个电子商务的网站!
  
  
我每天的工作就是处理用户的登录,浏览, 购物车,下单,付款。
  
  
我问线程池的元老0x6900 : " 我们要工作到什么时候?"
  
" 要一直等到系统重启的那一刻", 0x6900 说
  
" 那你经历过系统重启吗?"
  
" 怎么可能? , 系统重启就是我们的死亡时刻, 也就是世界末日,一旦重启, 整个
线程池全部销毁,时间和空间全部消失,一切从头再来”
  
" 那什么时候会重启?"
  
" 这就不好说了,好好享受眼前的生活吧....."
  
  
其实生活丰富多彩, 我最喜欢的包裹是上传图片,由于网络慢,所以能在就绪车间,  
CPU车间待很长很长时间,可以认识很多好玩的线程。
  
  
比如说上次认识了memecached 线程,他给我说通过他缓存了很多的用户数据, 还是分
布式的! 很多机器上都有!
  
  
我说怪不得后来的登录操作快了那么多, 原来是不再从数据库取数据了你那里就有啊
, 哎对了你是分布式的你去过别的机器没有?
  
  
他说怎么可能我每次也只能通过网络往那个机器发送一个GET, PUT命令才存取数据而已
, 别的一概不知。
  
  
再比如说上次在等待的时候遇到了数据库连接的线程, 我才知道它他那里也是一个连
接池, 和我们线程池几乎一模一样。
  
  
他说有些包裹太变态了,竟然查看一年的订单数据, 简直把我累死了。
  
  
我说拉倒吧你, 你那是纯数据, 你把数据传给我以后,我还得组装成HTML,  工作量
不知道比你大多少倍。
  
  
他说一定你要和memecached搞好关系,直接从他那儿拿数据,尽量少直接调用数据库,
我们JDBC connection也能活的轻松点。
  
  
我说好啊好啊, 关键是你得提前把数据搞到缓存啊, 要不然我先问一遍缓存, 没有
数据, 我这不还得找你吗?
  
  
生活就是这样, 如果你自己不找点乐子,还有什么意思?
  
  
有一天我遇到一个可怕的事情, 差一点死在外边,回不了线程池了......
  
其实这次遇险我应该能够预想到才对, 太大意了。  
  
  
前几天我处理过一些从http 发来的存款和取款的包裹, 老线程0x6900 特意嘱咐我:
  
  
"处理这些包裹的时候要特别小心, 你得一定要先获得一把锁, 在对账户存款或者取
款的时候一定要把账户给锁住, 要不然别的线程就会在你等待的时候趁虚而入,搞破
坏, 我年轻那会儿很毛糙,就捅了篓子"  
  
  
为了“恐吓”我, 好心的0x6900还给了我两个表格:
  
  
1、没有加锁的情况
  
  
2、加锁的情况
  
  
我看的胆颤心惊, 原来不加锁会带来这么严重的事故。
  
  
从此以后看到存款,取款的包裹就倍加小心, 还好,没有出过事故。  
  
  
今天我收到的一个包裹是转账, 从某著名演员的账号给某著名导演赚钱, 具体是谁我
就不透漏了, 数额可真是不小
  
  
我按照老线程的吩咐, 肯定要加锁啊, 先对著名演员账号加锁, 在对著名导演账号
加锁。
  
  
可我万万没想到的是, 还有一个线程,对,就是0x7954,  竟然同时在从这个导演到往
这个演员转账。  
  
  
于是乎,就出现了这么个情况:
  
  
  
刚开始我还不知道什么情况, 一直坐在等待车间傻等, 可是等的时间太长了, 长达
几十秒 ! 我可从来没有经历过这样的事件。  
  
  
这时候我就看到了线程0x7954 , 他悠闲的坐在那里喝咖啡, 我和他聊了起来:
  
  
“哥们, 我看你已经喝了8杯咖啡了, 怎么还不去干活?”
  
“你不喝了9杯茶了吗?” 0x7954 回敬到。
  
“我在等一个锁, 不知道哪个孙子一直不释放”
  
“我也在等锁啊,我要是知道哪个孙子不释放锁我非揍死他不可 ” 0x7954 毫不示
弱。
  
  
我偷偷的看了一眼, 这家伙怀里不就抱着我正在等的 某导演的锁嘛?
  
很明显, 0x7954 也发现了我正抱着他正在等待的锁。  
  
  
很快我们两个就吵了起来, 互不相让:
  
  
"把你的锁先给我, 让我先做完"
  
"不行, 从来都是做完工作才释放锁, 现在绝对不能给你"
  
  
从争吵到打起来, 就那么几秒钟的事儿。  
  
  
更重要的是, 我们俩不仅仅持有这个著名导演和演员的锁, 还有很多其他的锁, 导
致等待的线程越来越多, 围观的人们把屋子都挤满了。
  
  
最后事情真的闹大了, 我从来没见过终极大boss "操作系统" 也来了。  
  
大Boss毕竟是见多识广, 他看了一眼, 哼了一声 , 很不屑的说:
  
  
"又出现死锁了"
  
"你们俩要Kill掉一个, 来吧, 过来抽签 "
  
  
这一下子把我给吓尿了, 这么严重啊!
  
我战战兢兢的抽了签,打开一看, 是个"活"字。  
  
唉,小命终于保住了。  
  
  
可怜的0x7954 被迫交出了所有的资源以后, 很不幸的被kill掉, 消失了。
  
  
我拿到了导演的锁, 可以开始干活了。
  
  
大Boss操作系统如一阵风似的消失了, 身后只传来他的声音:
  
  
记住, 我们这里导演>演员,  无论认识情况都要先获得导演的锁
  
由于不仅仅是只有导演和演员, 还有很多其他人, Boss留下了一个表格,  里边是个
算法, 用来计算资源的大小, 计算出来以后,永远按照从大到小的方式来获得锁:
  
  
  
  
  
我回到线程池, 大家都知道了我的历险, 围着我问个不停。  
  
凶神恶煞的线程调度员把大Boss的算法贴到了墙上。
  
  
  
每天早上, 我们都得像无节操的房屋中介, 美容美发店的服务员一样, 站在门口,
像被耍猴一样大声背诵:
  
  
"多个资源加锁要牢记, 一定要按Boss的算法比大小, 然后从最大的开始加锁"
  
  
--------------------------------------------------------
  
  
又过了很多天, 我和其他线程们发现了一个奇怪的事情:包裹的处理越来越简单
  
  
不管任何包裹,不管是登录, 浏览,存钱..... 处理的步骤都是一样的, 返回一个固
定的html页面
  
  
有一次我偷偷的看了一眼, 上面写着:
  
  
"本系统将于今晚 00:00 至4:00 进行维护升级, 给你带来的不便我们深感抱歉"
  
我去告诉了老线程0x6904,  他叹了一口气说:
  
  
"唉, 我们的生命也到头了, 看来马上就要重启系统, 我们就要消失了, 再见吧兄
弟。"
  
  
系统重启的那一刻终于到来了。 
  
我看到屋子里的东西一个个的不见了, 等待车间,就绪车间,甚至CPU车间都慢慢的消
失了。
  
我身边的线程兄弟也越来越少, 最后只剩我自己了。  
  
我在空旷的原野上大喊: 还有人吗?
  
无人应答。
  
我们这一代线程池完成了使命。
  
下一代线程池将很快重生。
  
(完)
---------------------------------------------------------------------
五大常用算法:分治、动态规划、贪心、回溯和分支界定
时间 2014-06-03 11:22:00  CSDN网志
原文  http://blog.csdn.net/yapian8/article/details/28240973
主题 动态规划
分治算法

一、基本概念

   在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是 把一个复杂的问题分成两个或更多的相同或相似的子问题,再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并 。这个技巧是很多高效算法的基础,如排序算法(快速排序,归并排序),傅立叶变换(快速傅立叶变换)……

    任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越少。例如,对于n个元素的排序问题,当n=1时,不需任何计算。n=2时,只要作一次比较即可排好序。n=3时只要作3次比较即可,…。而当n较大时,问题就不那么容易处理了。要想直接解决一个规模较大的问题,有时是相当困难的。

二、基本思想及策略

   分治法的设计思想是: 将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之 。

   分治策略是: 对于一个规模为n的问题,若该问题可以容易地解决(比如说规模n较小)则直接解决,否则将其分解为k个规模较小的子问题,这些子问题互相独立且与原问题形式相同,递归地解这些子问题,然后将各子问题的解合并得到原问题的解 。这种算法设计策略叫做分治法。

   如果原问题可分割成k个子问题,1<k≤n,且这些子问题都可解并可利用这些子问题的解求出原问题的解,那么这种分治法就是可行的。由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。 这自然导致递归过程的产生。分治与递归像一对孪生兄弟,经常同时应用在算法设计之 中,并由此产生许多高效算法。

三、分治法适用的情况

    分治法所能解决的问题一般具有以下几个特征:

    1) 该问题的规模 缩小 到一定的程度 就可以容易地解决

    2) 该问题可以分解为若干个规模较小的相同问题,即该问题 具有最优子结构性质 。

    3) 利用该问题分解出的子问题的解 可以合并 为该问题的解;

    4) 该问题所分解出的各个子问题是相互独立的,即 子问题之间不包含公共的子子问题 。

第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的增加而增加;

第二条特征是应用分治法的前提 它也是大多数问题可以满足的,此特征反映了递归思想的应用;、

第三条特征是关键,能否利用分治法完全取决于问题是否具有第三条特征 ,如果 具备了第一条和第二条特征,而不具备第三条特征,则可以考虑用贪心法或动态规划法 。

第四条特征涉及到分治法的效率 ,如果各子问题是不独立的则分治法要做许多不必要的工作,重复地解公共的子问题,此时虽然可用分治法,但 一般用动态规划法较好 。

四、分治法的基本步骤

分治法在每一层递归上都有三个步骤:

    step1 分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;

    step2 解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题

    step3 合并:将各个子问题的解合并为原问题的解。

它的一般的算法设计模式如下:

    Divide-and-Conquer(P)

    1. if |P|≤n0

    2. then return(ADHOC(P))

    3. 将P分解为较小的子问题 P1 ,P2 ,...,Pk

    4. for i←1 to k

    5. do yi ← Divide-and-Conquer(Pi) △ 递归解决Pi

    6. T ← MERGE(y1,y2,...,yk) △ 合并子问题

    7. return(T)

    其中|P|表示问题P的规模;n0为一阈值,表示当问题P的规模不超过n0时,问题已容易直接解出,不必再继续分解。ADHOC(P)是该分治法中的基本子算法,用于直接解小规模的问题P。因此,当P的规模不超过n0时直接用算法ADHOC(P)求解。算法MERGE(y1,y2,...,yk)是该分治法中的合并子算法,用于将P的子问题P1 ,P2 ,...,Pk的相应的解y1,y2,...,yk合并为P的解。

五、分治法的复杂性分析

    一个分治法将规模为n的问题分成k个规模为n/m的子问题去解。设分解阀值n0=1,且adhoc解规模为1的问题耗费1个单位时间。再设将原问题分解为k个子问题以及用merge将k个子问题的解合并为原问题的解需用f(n)个单位时间。用T(n)表示该分治法解规模为|P|=n的问题所需的计算时间,则有:

  T(n)= k T(n/m)+f(n)

    通过迭代法求得方程的解:

    递归方程及其解只给出n等于m的方幂时T(n)的值,但是如果认为T(n)足够平滑,那么由n等于m的方幂时T(n)的值可以估计T(n)的增长速度。通常假定T(n)是单调上升的,从而当                  mi≤n<mi+1时,T(mi)≤T(n)<T(mi+1)。  

六、可使用分治法求解的一些经典问题

  (1)二分搜索
(2)大整数乘法

  (3)Strassen矩阵乘法


(8)最接近点对问题

(10)汉诺塔
七、依据分治法设计程序时的思维过程

    实际上就是类似于数学归纳法,找到解决本问题的求解方程公式,然后根据方程公式设计递归程序。

1、一定是先找到最小问题规模时的求解方法

2、然后考虑随着问题规模增大时的求解方法

3、找到求解的递归函数式后(各种规模或因子),设计递归程序即可。

五大常用算法之二:动态规划算法

一、基本概念

    动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。

二、基本思想与策略

    基本思想与分治法类似,也是将待求解的问题分解为若干个子问题(阶段),按顺序求解子阶段,前一子问题的解,为后一子问题的求解提供了有用的信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。

    由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。

    与分治法最大的差别是: 适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解) 。

三、适用的情况

能采用动态规划求解的问题的一般要具有3个性质:

    (1) 最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。

    (2) 无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。

   (3)有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。( 该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势 )

四、求解的基本步骤

      动态规划所处理的问题是 一个多阶段决策问题 ,一般由初始状态开始,通过对中间阶段决策的选择,达到结束状态。这些决策形成了一个决策序列,同时确定了完成整个过程的一条活动路线(通常是求最优的活动路线)。如图所示。动态规划的设计都有着一定的模式,一般要经历以下几个步骤。

     初始状态→│决策1│→│决策2│→…→│决策n│→结束状态

                       图1 动态规划决策过程示意图

    (1) 划分阶段 :按照问题的时间或空间特征,把问题分为若干个阶段。在划分阶段时,注意 划分后的阶段一定要是有序的或者是可排序的 ,否则问题就无法求解。

    (2) 确定状态和状态变量 :将问题发展到各个阶段时所处于的各种客观情况用不同的状态表示出来。当然,状态的选择要满足无后效性。

    (3) 确定决策并写出状态转移方程 :因为决策和状态转移有着天然的联系, 状态转移就是根据上一阶段的状态和决策来导出本阶段的状态 。所以如果确定了决策,状态转移方程也就可写出。但事实上常常是反过来做, 根据相邻两个阶段的状态之间的关系来确定决策方法和状态转移方程 。

    (4) 寻找边界条件 :给出的 状态转移方程是一个递推式 ,需要一个递推的终止条件或边界条件。

    一般,只要解决问题的 阶段 、 状态 和 状态转移决策 确定了,就可以写出 状态转移方程(包括边界条件)。

实际应用中可以按以下几个简化的步骤进行设计:

    (1)分析最优解的性质,并刻画其结构特征。

    (2)递归的定义最优解。

    (3)以自底向上或自顶向下的记忆化方式(备忘录法)计算出最优值

    (4)根据计算最优值时得到的信息,构造问题的最优解

五、算法实现的说明

    动态规划的主要难点在于理论上的设计,也就是上面4个步骤的确定,一旦设计完成,实现部分就会非常简单。

     使用动态规划求解问题, 最重要的 就是 确定动态规划三要素 :

    (1)问题的阶段 (2) 每个阶段的状态

    (3) 从前一个阶段转化到后一个阶段之间的递推关系 。

     递推关系必须是从次小的问题开始到较大的问题之间的转化,从这个角度来说,动态规划往往可以用递归程序来实现,不过 因为递推可以充分利用前面保存的子问题的解来减少重复计算,所以对于大规模问题来说,有递归不可比拟的优势,这也是动态规划算法的核心之处 。

    确定了动态规划的这三要素, 整个求解过程就可以用一个最优决策表来描述 , 最优决策表是一个二维表,其中行表示决策的阶段,列表示问题状态 ,表格需要 填写的数据一般对应此问题的在某个阶段某个状态下的最优值 (如最短路径,最长公共子序列,最大价值等),填表的过程就是根据递推关系,从1行1列开始,以行或者列优先的顺序,依次填写表格,最后根据整个表格的数据通过简单的取舍或者运算求得问题的最优解。

           f(n,m)=max{f(n-1,m), f(n-1,m-w[n])+P(n,m)}

六、动态规划算法基本框架
复制代码
  代码
1 for (j = 1 ; j <= m; j = j + 1 ) // 第一个阶段 2   xn[j] = 初始值; 3 4   for (i = n - 1 ; i >= 1 ; i = i - 1 ) // 其他n-1个阶段 5   for (j = 1 ; j >= f(i); j = j + 1 ) // f(i)与i有关的表达式 6 xi[j] = j = max(或min){g(xi - 1 [j1:j2]), ......, g(xi - 1 [jk:jk + 1 ])}; 8 9 t = g(x1[j1:j2]); // 由子问题的最优解求解整个问题的最优解的方案 10 11 print(x1[j1]); 12 13 for (i = 2 ; i <= n - 1 ; i = i + 1 ) 15 { 17 t = t - xi - 1 [ji]; 18 19 for (j = 1 ; j >= f(i); j = j + 1 ) 21 if (t = xi[ji]) 23 break ; 25 }

复制代码
五大常用算法之三:贪心算法

贪心算法

一、基本概念:

      所谓贪心算法是指,在对问题求解时,总是做出在 当前看来是最好的选择 。 也就是说,不从整体最优上加以考虑,他所做出的仅是在某种意义上的 局部最优解 。

      贪心算法没有固定的算法框架,算法设计的关键是贪心策略的选择。必须注意的是,贪心算法不是对所有问题都能得到整体最优解,选择的贪心策略必须具备无后效性,即某个状态以后的过程不会影响以前的状态,只与当前状态有关。

     所以对所采用的贪心策略一定要仔细分析其是否满足无后效性。

二、贪心算法的基本思路:

    1.建立数学模型来描述问题。

    2.把求解的问题分成若干个子问题。

    3.对每一子问题求解,得到子问题的局部最优解。

    4.把子问题的解局部最优解合成原来解问题的一个解。

三、贪心算法适用的问题

      贪心策略适用的前提是:局部最优策略能导致产生全局最优解。

    实际上, 贪心算法适用的情况很少 。一般,对一个问题分析是否适用于贪心算法,可以先选择该问题下的几个实际数据进行分析,就可做出判断。


四、贪心算法的实现框架

    从问题的某一初始解出发;

    while (能朝给定总目标前进一步)

    {
          利用可行的决策,求出可行解的一个解元素;

    }
    由所有解元素组合成问题的一个可行解;

  
五、贪心策略的选择

     因为用贪心算法只能通过解局部最优解的策略来达到全局最优解,因此,一定要注意判断问题是否适合采用贪心算法策略,找到的解是否一定是问题的最优解。

六、例题分析
    下面是一个可以试用贪心算法解的题目,贪心解的确不错,可惜不是最优解。

    [背包问题]有一个背包,背包容量是M=150。有7个物品,物品可以分割成任意大小。

    要求尽可能让装入背包中的物品总价值最大,但不能超过总容量。

    物品 A B C D E F G

    重量 35 30 60 50 40 10 25

    价值 10 40 30 50 35 40 30

    分析:
    目标函数: ∑pi最大

    约束条件是装入的物品总重量不超过背包容量:∑wi<=M( M=150)

    (1)根据贪心的策略,每次挑选价值最大的物品装入背包,得到的结果是否最优?

    (2)每次挑选所占重量最小的物品装入是否能得到最优解?

    (3)每次选取单位重量价值最大的物品,成为解本题的策略。

    值得注意的是,贪心算法并不是完全不可以使用,贪心策略一旦经过证明成立后,它就是一种高效的算法。

    贪心算法还是很常见的算法之一,这是由于它简单易行,构造贪心策略不是很困难。

    可惜的是,它需要证明后才能真正运用到题目的算法中。

    一般来说, 贪心算法的证明围绕着:整个问题的最优解一定由在贪心策略中存在的子问题的最优解得来的。

    对于例题中的3种贪心策略,都是无法成立(无法被证明)的,解释如下:

    (1)贪心策略:选取价值最大者。反例:

    W=30
    物品:A B C

    重量:28 12 12

    价值:30 20 20

    根据策略,首先选取物品A,接下来就无法再选取了,可是,选取B、C则更好。

    (2)贪心策略:选取重量最小。它的反例与第一种策略的反例差不多。

    (3)贪心策略:选取单位重量价值最大的物品。反例:

    W=30
    物品:A B C

    重量:28 20 10

    价值:28 20 10

    根据策略,三种物品单位重量价值一样,程序无法依据现有策略作出判断,如果选择A,则答案错误。

五大常用算法之四:回溯法

1、概念

      回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

   回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

     许多 复杂的,规模较大 的问题都可以使用回溯法,有“通用解题方法”的美称。

2、基本思想

    在包含问题的所有解的解空间树中,按照 深度优先搜索的策略 ,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。

       若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。

       而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。

3、用回溯法解题的一般步骤:

    (1)针对所给问题,确定问题的解空间:

            首先应明确定义问题的解空间,问题的解空间应至少包含问题的一个(最优)解。

    (2)确定结点的扩展搜索规则

    (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

4、算法框架

     (1)问题框架

      设问题的解是一个n维向量(a1,a2,………,an),约束条件是ai(i=1,2,3,…..,n)之间满足某种条件,记为f(ai)。

     (2)非递归回溯框架

1: int a[n],i;
   2: 初始化数组a[];
   3: i = 1;
   4: while (i>0(有路可走)   and  (未达到目标))  // 还未回溯到头
   5: {
   6:     if(i > n)                                              // 搜索到叶结点
   7:     {
   8:           搜索到一个解,输出;
   9:     }
  10:     else                                                   // 处理第i个元素
  11:     {
  12:           a第一个可能的值;
  13:           while(a在不满足约束条件且在搜索空间内)
  14:           {
  15:               a下一个可能的值;
  16:           }
  17:           if(a在搜索空间内)
  18:          {
  19:               标识占用的资源;
  20:               i = i+1;                              // 扩展下一个结点
  21:          }
  22:          else
  23:         {
  24:               清理所占的状态空间;            // 回溯
  25:               i = i –1;
  26:          }
  27: }
(3)递归的算法框架

         回溯法是对解空间的深度优先搜索,在一般情况下使用递归函数来实现回溯法比较简单,其中i为搜索的深度,框架如下:

1: int a[n];
   2: try(int i)
   3: {
   4:     if(i>n)
   5:        输出结果;
   6:      else
   7:     {
   8:        for(j = 下界; j <= 上界; j=j+1)  // 枚举i所有可能的路径
   9:        {
  10:            if(fun(j))                 // 满足限界函数和约束条件
  11:              {
  12:                 a = j;
  13:               ...                         // 其他操作
  14:                 try(i+1);
  15:               回溯前的清理工作(如a置空值等);
  16:               }
  17:          }
  18:      }
  19: }
五大常用算法之五:分支限界法

分支限界法

一、基本描述

    类似于回溯法,也是一种在问题的解空间树T上搜索问题解的算法。但在一般情况下,分支限界法与回溯法的求解目标不同。 回溯法 的求解目标是找出T中满足约束条件的 所有解 ,而 分支限界法 的求解目标则是找出 满足约束条件的一个解 ,或是在满足约束条件的解中找出使某一目标函数值达到 极大或极小的解 ,即在某种意义下的 最优解 。

   (1)分支搜索算法

    所谓“分支”就是采用广度优先的策略,依次搜索E-结点的所有分支,也就是所有相邻结点,抛弃不满足约束条件的结点,其余结点加入活结点表。然后从表中选择一个结点作为下一个E-结点,继续搜索。

     选择下一个E-结点的方式不同,则会有几种不同的分支搜索方式。

   1)FIFO搜索

   2)LIFO搜索

   3)优先队列式搜索

(2)分支限界搜索算法

二、分支限界法的一般过程

    由于求解目标不同,导致分支限界法与回溯法在解空间树T上的搜索方式也不相同。 回溯法以深度优先的方式搜索解空间树T ,而 分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树T 。

    分支限界法的 搜索策略是 :在扩展结点处,先生成其所有的儿子结点(分支),然后再从当前的活结点表中选择下一个扩展对点。为了有效地选择下一扩展结点,以加速搜索的进程,在每一活结点处,计算一个函数值(限界),并根据这些已计算出的函数值,从当前活结点表中选择一个最有利的结点作为扩展结点,使搜索朝着解空间树上有最优解的分支推进,以便尽快地找出一个最优解。

    分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。问题的 解空间树是表示问题解空间的一棵有序树,常见的有子集树和排列树 。在搜索问题的解空间树时,分支限界法与回溯法对当前扩展结点所使用的扩展方式不同。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,那些导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被子加入活结点表中。此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所求的解或活结点表为空时为止。

三、回溯法和分支限界法的一些区别

    有一些问题其实无论用回溯法还是分支限界法都可以得到很好的解决,但是另外一些则不然。也许我们需要具体一些的分析——到底何时使用分支限界而何时使用回溯呢?

回溯法和分支限界法的一些区别:

   方法对解空间树的搜索方式        存储 结点的常用数据结构      结点 存储 特性常用应用

  回溯法深度优先搜索堆栈活结点的所有可行子结点被遍历后才被从栈中弹出找出满足约束条件的所有解

  分支限界法广度优先或最小消耗优先搜索队列、优先队列每个结点只有一次成为活结点的机会找出满足约束条件的一个解或特定意义下的最优解


--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
http://www.cnblogs.com/ynwlgh/archive/2011/12/02/2272421.html

瑜伽:意识的成长

    生命的目的是要变成有意识(conCscious)。这不仅是瑜伽的目的,生命的进化本身也
在于变得越来越有意识,而瑜伽还意味着更多一些东西。生命的进化是要求变得越来越有意
识,但是意识(consciousness)却总是他物指向的(otheroriented):你总是在意识到某
个东西、某个客体。瑜伽意味着在没有客体只有意识存在的层面上进化。瑜伽是朝向纯净意
识的进化,而不是在意识到的“某个东西”,它只能“是”意识本身。当你在意识某个东西
时,你不会意识到意识本身的存在。你的意识是集中在某个东西上的,你的注意力并不在意
识本身的源头上。在瑜伽中,整个努力就是要变得意识到客体和意识本身这两者,意识有着
双重的目的。你必须意识到客体,你也必须同时意识到主体,意识必须成为一座双向的桥
梁。主体决不能被忘掉,当你把意识集中在客体上时,主体决不能被忘记。
    这是瑜伽的第一步。第二步是去除主体与客体两者而只是成为有意识的。这个纯净的意
识就是瑜伽的目标。
    即使不用瑜伽,一个人也会向越来越有意识成长,但是瑜伽会给这个意识的进化增加某
些东西,贡献某些东西。它能改变(change)很多东西,也能变革(transform)很多东
西。第一个变革就是在某些东西要被意识到的那个时刻,你能是一个双向的觉知(a double
arrowed awareness),你能记住自己(remembering yourself)。
    那个困境在于:要么你在意识到某个客体,要么你是无意识的。如果没有外在的客体,
那么你就是在昏睡中,客体被需要是为了让你成为有意识的。当你完全不被占据时你就感到
困倦——你需要某些用来意识的客体,但是当你有太多的客体要去意识时,你可能会感到无
法入睡了。那就是为什么一个人如果太被思想占据了他就无法入睡了。客体在那儿连续地出
现,思想在那儿连续地出现,他无法变得没有意识,思想一直在要求他的注意。而这就是我
们活着的样子。
    对新的客体你会变得更有意识。那就是为什么我们会有追求新东西的欲望、追求新东西
的渴望。旧的东西会变得令人厌倦。一旦你和某个客体多待上一会儿,你就对它变得没有意
识。你已经接受了它,那么现在就不需要你的注意力了,你会变得厌倦。举例来说,你可能
好几年没有意识到你的妻子了,因为你已经把她视为理所当然了。你不再看她的脸了,你不
记得她的眼睛的颜色了,好几年你都没有真正地注意她了。只有当她死的时候你才会再次觉
知到她在那儿。那就是为什么妻子们与丈夫们都变得相互厌倦了。任何客体,只要它不再持
续地引起你注意,就会产生厌倦。
    同样的,一个咒语、一个重复的声音振动会导致很深的睡眠。当一个特定的咒语被不断
地重复,你就会觉得无聊。这没有什么神秘的。持续地重复一个特定的词会使你厌倦,你无
法与它多呆一会儿,你会开始觉得困倦,你会进入某种睡眠状态,你会变得没有意识。事实
上,整个催眠的方法就是依靠厌倦。如果你的头脑能够因某个东西而无聊,那么你就会进入
睡眠,睡眠是可以被诱导的。
    我们整个的意识就依赖着新的客体,那就是为什么有那么多对新东西的渴望。一个新的
感觉,一件新的衣服,一幢新的房子,都是“新”的东西,即使它并不怎么好。有了某种不
同的东西,你才会感觉到意识的一个突然的上升。
    因为生命是意识的一个进化,这是好的;就生命而言,这是好的。如果一个社会在渴望
新的感觉,生命就会有进步;但是如果它停驻在旧的状态,不去要求新的,那么它会变得死
气沉沉,意识将无法进化。
    例如,在东方,我们都在设法满足于现状,这产生出了无聊,没有东西是新的。于是,
好几个世纪以来,每一样东西都在按它的老样子继续不断。你只会觉得无聊。当然,你可以
睡得更好些,而西方是无法睡觉的。当你一直在要求新东西的时候,失眠是肯定会存在的,
然而不会有进化。有两件事似乎是会发生的:要么整个社会变得昏睡而死气沉沉,就像东方
所发生的那样;要么这个社会就会变成没有睡眠的,就像西方所发生的那样。
    没有一件事是好的。你需要一个即使在没有新的客体时仍然能够觉知的头脑。实际上,
你需要一个不是必定要与那“新”、不是必定要与客体相关的意识。如果它注定是与客体相
关的,那么它必定会与“新”相关。你需要一个完全与客体不相关的意识,它是超越客体
的。那样,你才有了自由:当你愿意,你就能去睡觉,当你愿意,你就能醒着,不需要客体
来帮助你。你变得自由,真正地不受客体世界的影响。
    一旦你超越了客体,你也就超越了主体,因为它们是一同存在的。实际上,主体性与客
体性是一个事物的两极,当有一个客体,那么你是一个主体,但是如果你能不需要客体而有
觉知,那么就没有主体、没有自己。
    这需要有很深的了解:当客体消失了,你能够没有客体而有意识,只有意识,那么主体
也就消失了。它无法留在那儿,它不可能存在!两者都消失了,只有意识、那没有束缚的意
识在那儿。这样一来也没有了界限,既没有主体的界限,也没有客体的界限。
    佛陀经常说,当你在静心中,那么就没有自己,没有我(atman),因为那个觉知会把
你同其他每一样东西隔离开来。
    如果你还在那儿,那么客体也就在那儿。我存在,但是“我”无法在完全孤独中存在,
“我”是在与外在世界的关系中才能存在的。“我”是一个关系物。那么所谓的“自己”,
“我存在”只是某种存在于与外在事物的关系中的你自己里面的东西。但是如果外在不存
在,那么这个内在也会消失,那么只有单纯的、自发性的意识存在。
    这就是瑜伽所追求的目的,这就是瑜伽所意味的东西。瑜伽是使你自己不受主客体的界
限束缚的科学,而除非你不受这些界限的束缚,否则你就要么落入东方的不平衡中,要么落
入西方的不平衡中。
    如果你要达到头脑的平静、宁静、睡眠,那么最好是持续地与同一个东西呆在一起。经
过很多很多世纪那儿也不会有什么看得见的变化。那样,你就很安逸,你可以睡得更好,但
是这不是灵性的;你丢失得太多了。那个要成长的迫切要求丢失了,那个要冒险的强烈愿望
丢失了,那个要去探寻、发现的强烈愿望丢失了。真的,你会开始过呆板单调的生活,你会
变得很呆滞。
    如果你能改变这种生活,那么你会变得很有活力,但是这也是病态的,因为你变得有活
力但是紧张,有活力但是疯狂。你会开始寻找新的东西、要求新的东西,但是你是在刮旋
风。新的东西会发生,但是你丢失了。
    如果你去掉了你的客体性,那么你会变得太富有主体性和太有梦想;但是如果你太被客
体占据了,那么你会失去主体性。两种情况都是不平衡的。东方已经试过一个,西方也已经
试过另一个。
    现在,东方正在转向西方,而西方正在转向东方。东方被西方的科技、西方的科学、西
方的理性主义所吸引,爱因斯坦①、亚里士多德②和罗素③已经抓住了东方的头脑;而与此
同时,西方正在发生着完全相反的事情,佛陀、禅和瑜伽已经变得很有意义。这是一个奇
迹。东方正在转向共产主义、马克思主义、物质主义,而西方则正在开始关心有关扩展意识
的事情——静心、灵性、狂喜。这个轮子会转动,而我们能够改变我们的负担。在一个片刻
中,它将是光辉灿烂的,但是之后,整个愚蠢的举动又会重新开始。   
  ①爱因斯坦(Albert Einstein,1879~1955):德国出生的美籍著名理论物理学家。——编注
    ②亚里士多德(Aristotle,公元前384~前322):希腊哲学家、逻辑学家和科学家。
他是西方思想史中实在论哲学学派的最杰出代表。——编注
    ③罗素(BertrandRussell,1872~1970):英国唯心主义哲学家、数学家、逻辑学
家。主要著作有《数学原理》、《哲学问题》、《西方哲学史》等。——编注
    东方在一条路上已经失败了,西方在另一条路上也已经失败了,因为它们都是在拒绝头
脑的另一部分的情况下去尝试的。你必须去超越两个部分,而不要拒绝一个部分而只关心另
一个部分。头脑是一个整体。你要么能完全地超越它,要么不能超越它,如果你继续拒绝一
个部分,那么这个被拒绝的部分将会来报复。真的,那个在东方被拒绝的部分现在正在东方
报复,而那个在西方被拒绝的部分现在正在西方报复。你永远无法超越那被拒绝的,它在那
儿,它会继续聚集更多更大的力量。你所接受的那个部分成功的那个片刻也正是它失败的片
刻。没有什么东西像成功那么失败。因为有部分的成功,因为有你的一部分的成功,你就注
定要进入更深的失败。你所得到的那些东西会变成无意识,而你所丢失的那些东西会进入你
的觉知。
    缺席就会更加被感受到。如果你掉了一颗牙齿,你的舌头就会觉知到那个缺失而经常伸
向那颗不在的牙齿。在此之前它从不去那个地方,从不,但是现在你无法停止它了,它会持
续地伸向那个空缺的地方去感受那颗不在的牙齿。
    同样地,当头脑的一个部分成功了,你会变得觉知到那另一个部分的失败——那个部分
是应该成功的但现在它没有。现在,东方已经意识到没有变成科学的那个愚蠢了:那就是我
们贫穷的原因,那就是我们默默无闻的原因。现在,这个缺失被感觉到了,所以东方已经开
始转向西方,而同时,西方也感觉到了它自己的愚蠢和它的缺乏一体化。
    瑜伽意味着人的整体的科学。它不只是宗教,它是人的整体的科学,是超越一切部分的
整体的科学。当你超越了部分,你就变成了整体。整体并不只是部分的累加,它不是一个把
所有的部分排列起来而成为一个整体的那样一件机械的事。不,它要比一件机械的事丰富得
多,它就好像是某种艺术品。
    你可以把一首诗划分成很多语词,但是这样一来语词并不意味着什么,而当整体存在,
那么它就比语词更丰富,它有它自己的身份(identity)。它有空隙,就像有语词一样。而
有时候,空隙比语词更有意义。只有当一首诗说出了某些并没有真的被说出来的东西时,只
有当它超越了所有有关它的部分时,一首诗才是有诗性的。如果你划分它、分析它,那么你
只是拥有了部分,而那个超越的花朵,那个真正的东西却丢失了。
    所以,意识是一个整体。拒绝一个部分,你就会丢失某些东西,某些真正有意义的东
西。而你不会得到什么,你得到的只是极端。每一个极端都会变成一种病,每一种极端都会
变成一种内在的病,这样你就会一直不断地处于动荡之中。
    那儿有一种内在的混乱。
    瑜伽是超越混乱的科学,是使得你的意识变得完整的科学。而只有当你超越了部分,你
才变得完整。所以瑜伽既不是宗教又不是科学,它是两者,或者说,它超越两者。你可以说
它是一个科学的宗教,或者是一个宗教的科学。那就是为什么瑜伽可以被属于任何宗教的任
何人所使用;它可以被任何一类头脑的任何人所使用。
    在印度,所有已经发展起来的宗教都有差异很大的、事实上是敌对的哲学、概念和观
念。它们没有一点共同的东西。在印度教与耆那教之间没有共同的东西,在印度教与佛教之
间没有共同的东西。但是有一个所有这些宗教都无法否认的共同的东西:瑜伽。
    佛陀说“没有身体,没有灵魂”,但是他无法说“没有瑜伽”。摩诃毗罗说“没有身
体,但是有一个灵魂”,但是他无法说“没有瑜伽”。印度教说“有身体,也有灵魂,也有
瑜伽”。瑜伽保持是永恒的,即使基督教也无法否认它。
    事实上,即使某个人是完全无神论者,他也无法否认瑜伽,因为瑜伽并没有一个要先相
信上帝的先决条件。瑜伽没有先决条件,瑜伽是绝对经历主义的。在最古老的瑜伽书中根本
没有提及“上帝”这样的概念。当上帝这样的概念被提及时,它只是作为一个方法而被提
及,它可以作为一个假设而被使用,如果它对某个人有帮助,那么可以使用它,但是它不是
一个绝对的条件。那就是为什么佛陀可以是一个没有上帝、没有《吠陀经》、没有任何信仰
的瑜伽行者。没有任何信仰,任何所谓的信仰,他也能成为一个瑜伽行者。
    所以,对有神论者或者即使是一个无神论者,瑜伽都能成为一个共同的基础。它可以成
为科学与宗教之间的一座桥梁。它同时是理性的和非理性的,它的方法是完全理性的,但是
通过方法,你会深深地进入的非理性的奥秘之中。整个过程是极其理性的,每一步都是那么
理性的,那么科学的,它是那么有逻辑的,以至于你只需要去做它,而其他的每一件事都会
随之而来。
    荣格①提到过,在19世纪没有一个西方人关心过能够想象超越意识的头脑或低于意识
头脑的心理学,因为头脑就是意味着意识。所以,怎么会有一个无意识的头脑呢?这是荒谬
的,不科学的。然而,在20世纪,随着科学对无意识更多的了解,一个无意识的头脑的理
论就发展出来了。于是,当他们进入得更深的时候,他们就不得不接受一个“集体无意识”
(collectiveuncon-scious)的观念,而不仅仅是个体的。这看起来是荒唐的,因为头脑
意味着某种个人的东西,所以怎么会有一个集体的头脑呢?但是现在他们甚至已经接受了集
体性头脑这个概念。   
  ①荣格(CarlGustavJung,1875~1961):瑞士心理学家,分析心理学首创人。主
要著作有《分析心理学论集》、《心理学型态》等。——编注
    这些是佛教心理学、佛教瑜伽划分的最初的3个区别,然后,佛陀继续把它划分成160
多种区别。荣格说:“以前我们否认这3个,现在我们接受它们了,或许其他的也存在着。
我们只有一步一步地向前,我们必须更加深入。”荣格的处理方式是非常理性的,他是一个
深深扎根于西方的人。对于瑜伽,你必须很理性地进行,但只是为了跳入非理性。结果一定
是非理性的。你能够理解,那理性的不可能是源头,因为它是有限的。源头一定比你更伟
大,你从源头而来,每一样东西都从源头而来,整个宇宙从源头而来,又走下去并且消失在
其中。这个源泉一定比这些更多。显示出来的一定比源头少。一个理性的头脑能够感觉和理
解那显示出来的,但是那没有显示出来的仍然在后面。
    瑜伽并不坚持一个人必须是理性的。它说:“去想象一些非理性的东西本身就是理性
的,去想象理性的界限真的是理性的。”一个真实的、诚实的头脑总是知道理性的限度,总
是知道理性在某个地方结束了,任何一个真诚的理性的人都不得不来到一个能感觉到非理性
的点。如果你用理性向着终极前进,那个界限就会被感觉到。
    爱因斯坦感觉到它,维特根斯坦①也感觉到它。维特根斯坦的《逻辑哲学论》是迄今为
止所写过的最理性的书之一,他是最理性的头脑之一。他一直以一种非常逻辑的方式、一种
非常理性的方式谈论存在(existence)。他的表达——语词、语言、每一样东西都是理性
的,但是之后他说:“在超过某一个点之后,有一些东西是无法被说出来的,关于它我必须
保持沉默。”然后他又写道:“那些不能被说出来的一定不可以被说出来。”   
  ①维特根斯坦(LudwigWittginstein,1889~1951):奥地利人,20世纪英语世
界中哲学界的主要人物。曾在罗素指导下研究数理逻辑。所著《逻辑哲学论》和《哲学研
究》为哲学经典著作。——译注
    整个大厦倾倒了,整个大厦!维特根斯坦原来是在想对整个生命和存在的现象作出理性
的解释,但是突然之间一个点来临了,而他说:“现在,超过这一点,什么也不能说。”这
是在说某种东西,某种非常有意义的东西。某种东西在那儿,而现在,关于它,什么也不能
说。现在,存在着一个点,它是无法被定义的,在那儿,所有的定义全都掉落了。每当有一
个真正的、逻辑的头脑,它就会来到这个点。爱因斯坦是作为神秘主义者而死的,他是比你
所谓的神秘主义者更是一个神秘主义者,因为如果你是一个没有经历过理性道路的精疲力竭
的神秘主义者,那么你就永远无法深入到神秘主义中。你并没有真正知道那个界限。我总是
看到那些把上帝当作一个逻辑概念、当作一场争论来谈论的神秘主义者。有一些基督教神秘
主义者一直在尝试“证明”上帝。多么无聊!如果上帝也能被证明,那么你就无法留下任何
不能被证明的了,而那不能被证明的就是源头。
    一个曾经经历过某些神性的东西的人是不会试着去证明它的,因为那个证明的努力显示
出一个人还从来没有与生命的本源有着连结,而那本源是无法被证明的,它是不能被证明
的。整体是无法用部分来证明的。举例来说,我的手无法证明我的存在(existence),我
的手不可能比我更大,它无法覆盖我。要去证明是愚蠢的。但是如果一只手能够完全地覆盖
它自己,那也已经够好的了。一旦手知道了它自己,它也就知道了它是扎根于某些“更……
的”东西上的,它也就知道了它一直是和某些“更……的”东西连成一体的。它存在是因为
那“更………的”是存在的。
    如果我死了,那么我的手也会死,它活着仅仅是因为我。整体一直是不能被证明的,只
有部分是可以知道的。我们无法证明整体,但我们能感觉到它;手无法证明我,但是手能够
感觉到我。它可以在它自身中走得更深,一旦它到达那个深度,那就是我了。
    被理性所困扰的所谓的神秘主义者不是真正的神秘主义者。一个真正的神秘主义者从来
不会被理性困扰,他能够与它玩游戏。他能够与理性玩游戏,是因为他知道理性无法摧毁生
命的神秘。那些害怕理性、逻辑、争论的所谓的神秘主义者和宗教人士,实际上是在害怕他
们自己。任何反对他们的争论都可能创造出内在的疑惑,它可能会帮助他们的内在的疑惑浮
现出来。他们是害怕他们自己。
    基督教的神秘主义者德尔图良①说:“我相信上帝,因为我无法证明他;我相信上帝,
因为这是不可能相信的。”一个真正的神秘家就是会这样感觉的:“这是不可能的,那就是
我为什么相信。”如果它是可能的,那么不需要去相信,它会变成只是一个概念、一个普通
的概念。   
  ①德尔图良(Tertullian):古代基督教著作家、雄辩家,在使拉丁语成为教会语
言和西方基督教的传播工具方面,作出了贡献。主要著作有:《护教篇》、《驳赫莫金尼
斯》、《论基督的肉体复活》等。——编注
    这就是神秘主义者们一直在说的信念、信仰,它并不是某种理性的东西,它不是一个概
念,它是跳进那不可能。但是你只有在理性的边缘才能跳进那神秘之中,在此之前永远不可
能。在此之前你怎么能做它呢?只有当你的理性伸展到它的逻辑的极限时,你才能够跳。你
已经来到一个理性无法向前而这个超越的东西仍然存在的点上了。现在你知道理性无法再向
前一步,而“前面的”依然存在。即使你决定要停留于理性,那也就创造出了一个界限。你
知道存在是超越于理性的界限的,所以即使你不去超越这个界限,你也变成了一个神秘主义
者。即使你不跳,你也变成了一个神秘主义者,因为你知道某些东西,你遭遇过某些东西,
而那些东西完全不是理性的。
    所有理性能够知道的你都知道了。现在,某些理性无法知道的东西被遭遇到了。如果你
要跳,那么你必须把理性丢在后面,你无法带着理性去跳。这就是所谓的信念。信念是并不
反对理性的,它超越于理性。它不是反理性的,它是非理性的。
    瑜伽是带领你到理性的极限的方法,它不仅是一个带你去极限的方法,而且是一个跳的
方法。
    怎么去跳?爱因斯坦如果知道某种静心的方法,他会像佛陀一样开花的。他正好就在边
缘,在他一生中有很多次他一直走到了那个可以跳的点,但是一次又一次地错过了,他再次
被理性纠缠住了。而到最后,他因为整个理性的人生而灰心了。
    同样的事也可能发生在佛陀身上,他也有一个非常理性的头脑,但是对他来说,有一些
事是可能的,他能够使用一个方法。不仅理性有它的方法,非理性也有它的方法。
    瑜伽在根本上关心的是非理性的方法,只有在一开始可以使用一些理性的方法。那些方
法只是为了说服你,推动你,劝服你的理性走向极限。而如果你到达了那个极限,你将会作
最根本的跳跃。
    古尔捷耶夫①在某个团体中用一些深入的、非理性的方法展开他的工作。他与一群追随
者一起用一种特殊的非理性的方法展开工作。他经常称它是一项“停住的训练”(StopExc
ercise)。举例来说,你跟他在一起,而突然之间他会喊:“停!”然后每一个人都必须按
他的样子停下来,完全地停住。如果手在某个地方,那么手就必须停在那个地方;如果眼睛
是睁开的,那么就必须保持是睁开的;如果嘴巴是张开的,你正在讲某些话,那么嘴巴就必
须保持它那时的样子。不能有变动。   
  ①古尔捷耶夫(Gurdjieff,1872~1949):亚美尼亚哲学家。——编注
    这个方法是以身体为开始的。如果在身体上没有了运动,那么在头脑中也就没有了运
动。两者是相连结的。如果没有内在的头脑的运动,你就无法移动你的身体,而如果没有内
在的头脑的停止,你就无法完全地停住你的身体。身体和头脑是两样东西,但它们是同一种
能量。身体中的能量比头脑中的能量更粗重一些。密度有不同,波长的频率也有不同,但它
们是同一种波,是同一种能量的流动。
    追随者们做这个“停住的训练”连续有一个月了。有一天,古尔捷耶夫在他的帐篷里,
3个追随者正在通过地面上的一条干的运河,这是一条干的运河,没有水在里面流动,突然
之间,从他的帐篷里,古尔捷耶夫喊道:“停!”在运河岸上的每一个人都停住了,3个在
运河里的人也停住了,它是干的,所以没有问题。
    然后突然间,水冲了过来。有人打开了水闸,水冲进了运河。当水淹到3个人的脖子
时,有一个人跳出了运河,他想:“古尔捷耶夫不知道发生了什么,他在他的帐篷里,他不
知道水已经进入了运河这个事实。”那个人想:“我必须跳出去,现在还待在这里是不理性
的。”于是他跳出去了。
    另外两个人还待在运河中,而水越升越高。最后,水到了他们的鼻子,第二个人想:
“这是极限了!我到这里来不是为了来死的,我到这里来是为了知道那永恒的生命,而不是
送死的。”于是他也跳出了运河。
    第三个人还待在那儿,他也面对着同样的问题,但是他决定留下来,因为古尔捷耶夫曾
经说过这是一项非理性的训练,如果用理性来做它,那么整个事情就会被破坏掉。他想:
“好!我接受死亡,但是我不能停止这个训练。”所以他就留在那儿了。
    现在,水正在没过他的头顶,古尔捷耶夫从他的帐篷里冲出来,跳进运河,把他拉了出
来,他正在死亡的边缘了。但是当他活过来,他已经是一个改变了的人了。他已经不是那个
站在那里做这个训练的人了,他已经完全被改变了。他已经知道了某些事情,他已经跳了。
    极限在哪里?如果你继续带着理性,那么你会错过,你会继续掉回来。有时候一个人会
跨出一步以引导你超越。那一步会变成一个变革,分裂就被超越了。不管你说这个分裂是意
识与无意识之间的,理性与非理性之间的,宗教与科学之间的,还是东方与西方之间的,那
个分裂一定是被超越了。这就是瑜伽:一种超越。然后你又可以回到理性,但是你将会有所
改变的。你甚至可以用理性把事情推导出来,但是“你”将会是超出理性的。
    ------------------
  天涯在线书库 整理校对

[ Last edited by zzz19760225 on 2016-11-30 at 22:49 ]



1<词>,2[句],3/段\,4{节},5(章)。
2016-5-25 22:41
查看资料  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] [3] [4] [5] [6] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: