文档库 最新最全的文档下载
当前位置:文档库 › 背包十年读书心得

背包十年读书心得

背包十年读书心得
背包十年读书心得

"一段历经十年,终见彩虹的梦想旅程…

一个以旅行为生的“狂徒”日记…

一名网络时代成就的新文艺青年….

一部梦想拥有者的青春读本….

中国版的凯鲁雅克,中国版的《在路上》

让读者看到自己曾经的梦想

励志:关于梦想与成长,自由与坚持

现在人人都喜欢旅行,可不是没钱就是没时间。背包十年的作者在10年前也跟所有人一样既没钱也没时间,可他就是凭着对旅行的热爱对世界的好奇,让他从一个纯业余的背包客变成了如今的职业旅行者。现在他的旅行不仅不用花钱(有各种赞助),还能赚到钱(卖游记和照片),他的10年背包生涯关于梦想、成长与坚持。是一本现代社会励志的心灵鸡汤。你是否也想复制他的成功之路?

与市面上的国别体游记不同,这本书是编年体结构。不是描述景点,而是描述一种成长,描述一个青年最绚烂的10年光阴,像朝阳一样,照亮每个心中还有梦想的人。

美国有一个旅行家俱乐部,把世界分成318个国家和地区,但全世界只有9个人走完这全部所有。作者之前的理想就是想成为世界第10人,中国第一人。但现在他对理想进行了微调,就是通过努力,让更多人喜欢旅行热爱旅行。他从三毛、格瓦拉身上获得关于旅行的梦想,他的使命就是把这种梦想在下一代人的身上传递。

一直觉得,有些人可以旅行,而有些人则必须旅行,小鹏就是。只有在途中,才能拥有挣脱一切的力量,让生命的旅程继续下去。

对于小鹏并不陌生,多年前,读过他的第一本书《我把欧洲塞进背包》,老实说,那本书很稚嫩,与其说是游记,不如说是一个男孩的旅行随笔。我是在学校的图书馆,边晒太阳边看这本书的,里面那张历程80天的箭头路线,充满了一个大男孩征服了小小世界后自豪并带点小炫耀的意味,加上封底他那张青涩的脸和招牌式的微笑,只能让我这个读者心生羡慕,却谈不上崇拜。

但就是这样一本稚嫩的书,却还是有着不一般的魔力,直到后来我才逐渐明白这种魔力并非来自书本身的文字或者图片,而是来源于这个作者。Everyone has only one life,there must be something you have never seen,somewhere you have never been,just go for it.比较有意思的是在那本书里,最后作者埋下一个关于爱情的浮笔,他走遍欧洲还是最想回到心爱的女孩身边,看完书后我也联想过或许这个男孩就从此脱下背包,过回一个白领朝九晚五的生活,精致但是黑白。

后来一次偶尔的机会,我看到了小鹏的博客,很惊讶的发现他一直都在行走,头像多了好几分沧桑的味道。他拍摄的照片视角更为开阔宁静恬淡,文字也更加细腻庄重并且深入。同时也由那个大男孩蜕变为一个坚强的旅行者,从这个时候起我定期浏览他的博客并视他为偶像,精神领袖。

很高兴看到《背包十年》这本书问世,本以为我可以花一个或两个晚上就把这本书读完,但是拿到书后一翻开我就知道我错了。它不再是一本游记,一本随笔或者一本旅行攻略,它是一段庄重的心路历程,关于旅行也关于捍卫梦想。旅行是一件很庄重的事情,不仅困难在决定出发,更在于在途中永不迷失自己,不断传递爱传递梦想,然后回到原点,整顿并计划下一次的旅行。

同时这本书也是一本近乎严谨的编年式记载体,没有不必要的插图也没有过多的旅行照片,只有平实而真挚文字,原汁原味地保留了十年来文字和心灵上的蜕变。这是一本小鹏写给自己的书,十年只是一个记号,旅行还是会继续,用十年的时间他捍卫了自己梦想并且会

永不停歇;也是写给所有同样热爱旅行的年轻人的书,让我们可以追随他的态度或者他的脚步,去寻找并完成我们的旅行梦想。

刚刚我有看到一个评论者评价这本书“感觉是内容空洞,徒有虚名”,我想他肯定没有深入地品味这本书或者根本就是一个从内心鄙视旅行的人。这本书的魅力同样不仅仅在于文字的本身,第一章节的大数分文字在《我把欧洲塞进背包》已经纪录过,唯一多的谜底就是那个女孩子吧,呵呵,原来那场美好的爱情并未有完美的结局,也或者因为这样才给了我们这样一个精彩的小鹏。后面的章节在小鹏的博客里也有过一些记录,但是当所有的途中文字和后旅行时期的心中所想串连在一起并成为十年的跨度后,就变成了一部庄重的文本。

几乎每看一两个章节我就要停顿下来想一想或什么也不想只是停顿下来,旅行是一次位移,捍卫梦想是一种态度,看完之后,既得到心灵的震撼,又会有许多的迷惘与困惑,这些迷惘与困惑一直萦绕在心,使我陷入不可自拔的思考,而思考越深,对旅行的艰难性就理解越深,再想到这些年我自己的旅行,认识也就越深刻了。

最后要谢谢小鹏,谢谢你用十年的坚持让我看到捍卫梦想的力量,好让我也热泪盈眶地也去继续我的旅行

【小鹏语录】——摘自《背包十年》

天堂,不过是灵魂自由的人来来往往。

他告诉我世俗的眼光不重要,自己内心的声音才重要;他教会我要去细致观察这个世界,每个人都有自己独一无二的视角。谢谢你,文森特?梵高。

我们要相信,自己在某个领域是块真金,这是我们战胜生活磨难的底牌。

无论是否有信仰,只要能够日日自持,控制欲望,善良而不贪婪,怎样将都是一种积极的人生态度。

我们来丽江,就是为了能好好地哭一场或者醉一场。哭过醉过之后,一切都可以重来。

对我来说,简单与自由同义。大多数人,一直在做加法,积累了很多,想要放下时,发现自己变成了温水中的青蛙,想跳已经没有力气。而我因为没有负担,才能越飞越高,越走越远。

在妈妈心中一定有一张世界地图。那地图上没有国家,没有城市,只有我走过的每一步路。我也知道,我的每一步都踏着她的担心。

旅行者和街头艺人之间有着相通的本质。街头艺人粉墨登场,对他们来说,处处是舞台。而旅行者虽然素面朝天,可在我看来,处处都是人生。

我喜欢和有天赋的人一起旅行,那是在路途之外,另一个多彩多姿的世界。

风筝能否高飞,梦想能否实现,关键不在于线有多长风有多大或者有多少外力的支持与帮助,而在于我们自己的态度。是否乐观,是否坚定,是否专注。

如果把英语比作基本武器,把浅尝辄止地突击学习其他语言比作秘密武器,那自助旅行者打通语言关的终极武器就是微笑了。

相同的地方,相同的人,相同的事情,但是对不同人施加的影响截然不同。这是别人的旅行无法被复制的原因,也是旅行的魅力所在。

加尔各答修道院里的义工身份多样,有法国来的学生,有加拿大的司机,来自荷兰的银行家。大家朗声言笑。给某个相熟修女起个无伤大雅的外号,抱怨加尔各答出租车宰客的无良,讨论着两周后即将开始的非洲旅行。大家来这里工作,不但没有任何报酬,还要搭上机票、伙食费、住宿等各项开支。但仍义无反顾地来了,因为大家都明确地知道,帮助别人即是帮助自己,爱别人即是爱自己。

原来,每一个旅行者真的只是一颗孤独行星。原来,孤独是自由的另外一个名字。

我曾经做过八份各种各样的工作,原来我最喜欢最擅长的却只是旅行,然后把旅行记

录,再和朋友分享。如果这算一种职业,我能做得比任何人都要敬业和出色。

原来凤凰提供了这样一个地方,让人把遗忘的时光重新品尝。

他用他的舞步,他的歌声,他的极致,他的独行,把自己的传说变成传奇,把传奇变成神话。其实MJ永远都不会走,在爱他的人心中。

旅行应该是美学建筑学历史学,而绝对不应该是经济学。如果把在巴黎转机就算去过法国,那我绕地球一圈,哪用的了3000美元?

所谓坚强,不是在灾难面前不哭,而是要笑着面对以后。

真正的奢华并不仅是指硬件设施的品牌与造价,更是一种精益求精的服务态度。后者虽然看不见,却能让人感受得到。

摄影应该像写作一样,是对一瞬间所见所感的记录,是对一个人成长的记录,永远不要追求被大多数人认可。当一个人自信力足够强大,强大到可以建立自己的审美体系和价值标准的时候,还有谁会在意别人怎么说怎么评价?而在这样的时候,你的信念你的坚持已足以把别人感动。

To dream,为了在年华老去的时候不鄙视自己。

01背包问题不同算法设计、分析与对比报告

实验三01背包问题不同算法设计、分析与对比一.问题描述 给定n种物品和一背包。物品i的重量是w i ,其价值为v i ,背包的容量为c。 问题:应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。 说明:在选择装入背包的物品时,对每种物品i只有两个选择,装入背包或不装入背包,也不能将物品装入背包多次。 二.实验内容与要求 实验内容: 1.分析该问题适合采用哪些算法求解(包括近似解)。 ^ 动态规划、贪心、回溯和分支限界算法。 2.分别给出不同算法求解该问题的思想与算法设计,并进行算法复杂性分析。 动态规划: 递推方程: m(i,j) = max{m(i-1,j),m(i-1,j-wi)+vi} j >= wi; m(i-1,j) j < wi; 时间复杂度为O(n). 贪心法: ^ 算法思想:贪心原则为单位价值最大且重量最小,不超过背包最大承重量为约束条件。也就是说,存在单位重量价值相等的两个包,则选取重量较小的那个背包。但是,贪心法当在只有在解决物品可以分割的背包问题时是正确的。贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择。 用贪心法设计算法的特点是一步一步地进行,根据某个优化测度(可能是目标函数,也可能不是目标函数),每一步上都要保证能获得局部最优解。每一步只考虑一个数据,它的选取应满足局部优化条件。若下一个数据与部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中, 直到把所有数据枚举完,或者不能再添加为止。 回溯法:

回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量。这种具有限界函数的深度优先生成法称为回溯法。 对于有n种可选物品的0/1背包问题,其解空间由长度为n的0-1向量组成,可用子集数表示。在搜索解空间树时,只要其左儿子结点是一个可行结点,搜索就进入左子树。当右子树中有可能包含最优解时就进入右子树搜索。 时间复杂度为:O(2n) 空间复杂度为:O(n) : 分支限界算法: 首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。在优先队列分支限界法中,节点的优先级由已装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余容量的价值和。 算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。当扩展到叶节点时为问题的最优值。 3.设计并实现所设计的算法。 4.对比不同算法求解该问题的优劣。 这动态规划算法和贪心算法是用来分别解决不同类型的背包问题的,当一件背包物品可以分割的时候,使用贪心算法,按物品的单位体积的价值排序,从大到小取即可。当一件背包物品不可分割的时候,(因为不可分割,所以就算按物品的单位体积的价值大的先取也不一定是最优解)此时使用贪心是不对的,应使用动态规划。 5.需要提交不同算法的实现代码和总结报告。 动态规划方法: public class Knapsack {

回溯算法解决0-1背包问题(DOC)

《算法分析与设计》实验报告 2015-2016年第2学期 实验班级: 学生姓名: 学号: 指导老师: 信息工程学院

实验项目名称:回溯算法解决0-1背包问题 实验日期:2016年5 月18 日 一、实验类型:□√验证性□设计性 二、实验目的 掌握0—1背包问题的回溯算法 三、实验内容及要求 给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 四、实验步骤 #include using namespace std; class Knap { friend int Knapsack(int p[],int w[],int c,int n ); public: void print() { for(int m=1;m<=n;m++) { cout<

int cw;//当前重量 int cp;//当前价值 int bestp;//当前最优值 int *bestx;//当前最优解 int *x;//当前解 }; int Knap::Bound(int i) { //计算上界 int cleft=c-cw;//剩余容量 int b=cp; //以物品单位重量价值递减序装入物品while(i<=n&&w[i]<=cleft) { cleft-=w[i]; b+=p[i]; i++; } //装满背包 if(i<=n) b+=p[i]/w[i]*cleft; return b; } void Knap::Backtrack(int i) { if(i>n) { if(bestp

免责声明(驴友)

免责声明: 此声明为有关责任的豁免、权利的放弃、风险的承担和赔偿的协议。通过阅读此文件,你已经完全获知和理解以下的条款和内容。 首先说明本次活动为非赢利性质自助游活动,不是商业活动,也不是旅行社组团旅游。全程遵循“自助,互助,AA,环保”的原则。 一、风险的承担: 我自愿参加此次活动。我理解、我必须同意和签署此有关责任豁免、权利放弃和风险承担的协议,方可参加本次活动。 我知道活动的策划者只是活动的联系人,并不是职业的领队、向导或有许可证的急救人员。我知道他和同行的队友可能并没有参加过户外领队的课程、或急救(包括野外)的培训和经验。我知道他们并不对我安全负责。 二、关于豁免责任,放弃权利和赔偿的协议 1.参加此次活动,包括、但不限于,徒步、露营、登山、负重远行、山路乘车等,在此我同意,如果因为参加此活动(包括途中)和在活动中使用装备而受到伤害的话,我放弃追究和要求赔偿的权利,同时免除同队其他成员的法律责任。 2. 我理解户外活动可能对身体和精神方面都有严酷的要求,可能包括在崎岖地带和恶劣天气中进行活动,可能远离救助和医疗服务,我理解可能要24小时后才能获得救援,所有救援和医疗的费用将由我自己承担。我理解当参加户外活动时,我有可能面对真实的风险而受到伤害,甚至死亡。这些风险包括跌坠,落石,闪电,过河,失温,霜冻,冻伤,咬伤,刺伤,犬咬,野兽袭击和各种意外。我理解装备可能会存在缺陷,而这些缺陷可能会导致我受伤甚至死亡。我清楚获知活动计划的联系人无法全面预见该活动中所有的风险和不利,我理解以上所列的风险并不完全含括了此次活动中的所有可能的风险,并且同意免责和放弃权利的协议并不仅限于以上所列的风险中。 3. 我理解并清楚知道身体活动和装备的使用是有潜在危害的。我也理解健身和休闲的活动也包含有导致受伤,心脏病和甚至死亡的风险,我知道有可能涉及危险,我自愿参加这些活动和使用活动的装备。因此,我同意承担和接受任何和所有的伤害的风险,甚至死亡的风险,并且,我永远免除此次活动的联系人和同行伙伴们的法律责任。 4. 我同意承担所有的个人受到伤害的风险,包括瘫痪和死亡,这些风险是可能发生在往返参加活动的途中,或者是在参加活动的时候。我清楚获知我已经被提供了自由选择的权利,可以选择往返活动地点的交通方式。我同意承担由于我选择了自己的交通方式往返活动地点而引起的相关的风险和责任。 5. 我清楚获知此次活动的成员都和本人一样是自愿的参与者,其并不承担法律责任,意外保险和健康保险等。我了解自行购买保险的意义,以防任何的伤害。 6. 我理解我能够通过以下措施来减少我的风险:更加注意环境,注意我的身体和精神状况,注意所有与安全相关的衣物和装备的适用状况,和只参加哪些自己精神和身体能力之内的活动。我清楚获知我已经被鼓励发展一种好问和怀疑

动态规划与回溯法解决0-1背包问题

0-1背包动态规划解决问题 一、问题描述: 有n个物品,它们有各自的重量和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和? 二、总体思路: 根据动态规划解题步骤(问题抽象化、建立模型、寻找约束条件、判断是否满足最优性原理、找大问题与小问题的递推关系式、填表、寻找解组成)找出01背包问题的最优解以及解组成,然后编写代码实现。 原理: 动态规划与分治法类似,都是把大问题拆分成小问题,通过寻找大问题与小问题的递推关系,解决一个个小问题,最终达到解决原问题的效果。但不同的是,分治法在子问题和子子问题等上被重复计算了很多次,而动态规划则具有记忆性,通过填写表把所有已经解决的子问题答案纪录下来,在新问题里需要用到的子问题可以直接提取,避免了重复计算,从而节约了时间,所以在问题满足最优性原理之后,用动态规划解决问题的核心就在于填表,表填写完毕,最优解也就找到。 过程: a) 把背包问题抽象化(X1,X2,…,Xn,其中 Xi 取0或1,表示第i个物品选或不选),V i表示第i个物品的价值,W i表示第i个物品的体积(重量); b) 建立模型,即求max(V1X1+V2X2+…+VnXn); c) 约束条件,W1X1+W2X2+…+WnXn (V2X2+V3X3+…+VnXn)+V1X1;

动态规划之01背包问题(最易理解的讲解)

01背包问题,是用来介绍动态规划算法最经典的例子,网上关于01背包问题的讲解也很多,我写这篇文章力争做到用最简单的方式,最少的公式把01背包问题讲解透彻。 01背包的状态转换方程f[i,j] = Max{ f[i-1,j-Wi]+Pi( j >= Wi ), f[i-1,j] } f[i,j]表示在前i件物品中选择若干件放在承重为j 的背包中,可以取得的最大价值。 Pi表示第i件物品的价值。 决策:为了背包中物品总价值最大化,第i件物品应该放入背包中吗? 题目描述: 有编号分别为a,b,c,d,e的五件物品,它们的重量分别是2,2,6,5,4,它们的价值分别是6,3,5,4,6,现在给你个承重为10的背包,如何让背包里装入的物品具有最 首先要明确这张表是从右到左,至底向上生成的。 为了叙述方便,用e10单元格表示e行10列的单元格,这个单元格的意义是用来表示只有物品e时,有个承重为10的背包,那么这个背包的最大价值是6,因为e物品的重量是4,背包装的了,把e装进去后价值为6。然后是e9单元格表示背包承重9,只有物品e, e装进去后,背包价值为6,接着是e8, e7单元格,一直到e3单元格表示背包承重3,但物品e承重4,装不了,所以e3=0, 对于d10单元格,表示只有物品e,d时,承重为10的背包,所能装入的最大价值,是10,因为物品e,d这个背包都能装进去。对于承重为9的背包,d9=10,是怎么得出的呢? 根据01背包的状态转换方程,需要考察两个值, 一个是f[i-1,j],对于这个例子来说就是e9的值6,另一个是f[i-1,j-Wi]+Pi; 在这里, f[i-1,j]表示我有一个承重为9的背包,当只有物品e可选时,这个背包能装入的最大价值 f[i-1,j-Wi]表示我有一个承重为4的背包(等于当前背包承重减去物品d的重量),当只有物品e可选时,这个背包能装入的最大价值 f[i-1,j-Wi]就是指单元格e4值为6,Pi指的是d物品的价值,即4 由于f[i-1,j-Wi]+Pi = 6 + 4 = 10 大于f[i-1,j] = 6,所以物品d应该放入承重为9的背包,所以d9=10.

高考作文材料之驴友有偿救援篇

高考作文材料之驴友有偿救援篇 (一) 记者从四川省四姑娘山景区管理局获悉,近日,四川省四姑娘山景区开出了首份有偿救援罚单。被处罚的广州籍男子周某因进入景区未办理入沟及户外活动手续,违反了相关条例和管理办法,被给予2000元罚款的行政处罚,并由其自行承担此次救援行动中产生的费用3000元。 8月13日上午9时,四姑娘山管理局接报,广州籍男子周某在四姑娘山自然保护区失联,家属请求搜寻。接报后,四姑娘山景区管理局立即派出专业的户外救援团队,并联合小金县警方上山搜救。按照以往的惯例,搜救完成后也就万事大吉画上句号了。然而,这一次有点与众不同,打破了义务救援的常规,被施救者同时接到一份“有偿救援罚单”,2000元的行政处罚罚款和3000元的救援费用,攻击需要自己承担5000元资金。 2000行政处罚罚单是师出有名的,因为进入“禁止进入的区域”已经违反了有关规定,理应被处罚。而3000元救援费用则是按照救援出动的人力等计算出来的。这次的行政处罚罚单和救援费用承担,可以说具有典型意义。谁违反了社会规则谁就应该付出代价,接受了救援服务就应该支付救援服务费用,这是正义的回归。 现实生活中,尽管有关部门一再提醒,可就是有“任性的驴友”我行我素,为了自己的“私人欲望”置公共安全不顾,置社会规则不顾,进入“禁止进入的区域”,拿着生命去赌一把。不仅把自己置于

危险境地,还给他人安全带来隐患。幸运者被成功救援,不幸运者则可能遇难,给社会给家庭带来痛楚。每一次救援,大家都认为是天经地义的,都认为是理所当然的。我们的公共资金,我们的公共力量,就该承担这样的代价?或者说,这种“不该发生的救援”原本是可以避免的。 更值得一说的则是,在参与一些“不该发生的遇险事件”中,不仅浪费了珍贵的社会资源,还可能付出生命的代价,参与救援者遇险的事情是多发的,甚至失去了生命。这些都是因为一部分驴友太任性造成的,旅游的“驴脾气”是该好好治治了。 苦口婆心劝说,义正词严教育,就是不能让“任性的驴友”警醒,依然是“偏向虎山行”。这个时候,“有偿救援罚单”就显得特别有意义了,这是对社会规则的维护,这是对不遵守规则者最好的教训。因此,“有偿救援罚单”应该常态化,四姑娘山做到了,其他地方也应该如此。 当然,还需要防范“有偿救援罚单”被滥用,要分清楚“游客遇险”的性质,切莫出现了为了利益乱开“有偿救援罚单”的情况。而且需要一个更加规范的费用计算方式,有待实现法制化、规范化。 (二) 2019年3月4日,6名驴友到南宁市上林县大明山龙头峰探险时意外失联,经消防、蓝天救援队等数百名救援人员多方搜救,在失联超过96个小时的情况下,6人全部获救。随后,6名驴友因未经批准、擅闯自然保护区核心区,分别被自然保护区管理处开出行政处罚罚

回溯法和分支限界法解决背包题

0-1背包问题 计科1班朱润华 32 方法1:回溯法 一、回溯法描述: 用回溯法解问题时,应明确定义问题的解空间。问题的解空间至少包含问题的一个(最优)解。对于0-1背包问题,解空间由长度为n的0-1向量组成。该解空间包含对变量的所有0-1赋值。例如n=3时,解空间为:{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1),(1,1,0),(1,1,1)}然后可将解空间组织成树或图的形式,0-1背包则可用完全二叉树表示其解空间给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大 形式化描述:给定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn,), xi∈{0,1}, ∑ wi xi≤c,且∑ vi xi达最大.即一个特殊的整数规划问题。 二、回溯法步骤思想描述: 0-1背包问题是子集选取问题。0-1 背包问题的解空间可以用子集树表示。在搜索解空间树时,只要其左儿子节点是一个可行节点,搜索就进入左子树。当右子树中有可能含有最优解时,才进入右子树搜索。否则,将右子树剪去。设r是当前剩余物品价值总和,cp是当前价值;bestp是当前最优价值。当cp+r<=bestp时,可剪去右子树。计算右子树上界的更好的方法是将剩余物品依次按其单位价值排序,然后依次装入物品,直至

装不下时,再装入物品一部分而装满背包。 例如:对于0-1背包问题的一个实例, n=4,c=7,p=[9,10,7,4],w=[3,5,2,1]。这4个物品的单位重量价值分别为[3,2,3,5,4]。以物品单位重量价值的递减序装入物品。先装入物品4,然后装入物品3和1.装入这3个物品后,剩余的背包容量为1,只能装的物品2。由此得一个解为[1,,1,1],其相应价值为22。尽管这不是一个可行解,但可以证明其价值是最优值的上界。因此,对于这个实例,最优值不超过22。 在实现时,由Bound计算当前节点处的上界。类Knap的数据成员记录解空间树中的节点信息,以减少参数传递调用所需要的栈空间。在解空间树的当前扩展节点处,仅要进入右子树时才计算上界Bound,以判断是否可将右子树剪去。进入左子树时不需要计算上界,因为上界预期父节点的上界相同。 三、回溯法实现代码: #include "" #include using namespace std; template class Knap { template friend Typep Knapsack(Typep [],Typew [],Typew,int);

驴友的驴友行为分析

摘要:“驴友”作为本文的研究对象,特指以徒步。骑行。驾车等方式,参与露营。登山。攀岩。漂流。穿越。垂钓等非常规性 的户外旅游活动的爱好者〔“驴友”主要采取自由。独立的户外自助旅游方式,主要通过网络交流旅游信息。召集伙伴。分享旅 游体验。在相似的文化背景。消费取向与行动逻辑下,“驴友”的旅游行为日益呈现出群体性符号特征。 “驴友”一词来源于“旅”友的谐音,最初是由新浪旅游 论坛传出。因此,“驴友”特指旅游“爱好者”,而非旅游本身。 “驴友”作为本文的研究对象,特指以徒步。骑行。驾车等方 式,参与露营。登山。攀岩。漂流。穿越。垂钓等非常规性的户 外旅游活动的爱好者。与常规旅游方式相比,“驴友”通常是 以体验大自然为目的,独立安排旅游行程,自备旅游用品。 因而,“驴友”的旅游行为通常表现为自由。独立。富有探险 精神的户外旅行方式。具体来说,“驴友”的旅游行为一般具 有三个表征:一是非营利性。他们不依赖于常规的旅行机 构,而是通过网上旅游论坛等形式召集伙伴,对旅行中的花 费实行“AA”制。二是猎奇性。他们不走商业旅游路线,而倾 向于更加独特。更加优美,鲜有人至的自然风景区,以获取 对户外风景。人文。生活的非常规体验。三是自助性。他们往 往自备野外生存工具和交通工具(包括帐篷。厨具。等等), 他们将旅行装备用纳入背包,亦称“背包旅行”。 一。“驴友”旅游行为的文化背景 “驴友”群体早期主要以从事地质研究。动植物学研究 的专业人员,以及一些资深的旅游爱好者构成。如今,包括 在校大学生在内的都市年轻人渐渐构成了“驴友”的主体。 一方面,“驴友”群体内部成员具备较高的文化认知能力,能 够广泛接触新生旅游事物。另一方面,“驴友”群体内部成员 的多元文化需求,促使他们日益将其独特的户外旅游文化 彰显为一种群体性符号特征。其中,对户外自助旅游的选 择,日益成为“驴友”作为一个群体文化符号确立的重要表 现形式。 形成共同意义的文化符号来表达这种文化。“驴友”作为一 个新生的社会群体,他们不仅以“驴友”作为代表自己群体 的共同文化符号,而且逐渐形成了一系列鲜明的。反映群体 内部差异的个性化符号。例如,“驴友”们依据不同年龄层次 的群体内部成员的共同特点,将“驴界”成员分为了“史前 驴”。“引路驴”。“头驴”。“逍遥驴”等类别。他们还依据“驴 界”成员各自的旅行偏好,分别给予了“驴嘴”。“驴腿”。“驴 眼”等戏谑性的称谓。 在网络文化的推波助澜下,“驴友”作为一个具有共同 意义的文化符号己经在群体内部深入人心,并对外群体也 产生了很强的吸引力。当一个社会个体进入“驴友”内群体, 获得了这种共同意义的文化符号以后,这一符号便能将他

算法设计背包问题

算法实验报告 ---背包问题 实验目的 1.掌握动态规划算法的基本思想,包括最优子结构性质和基于表格的最优 值计算方法。 2.熟练掌握分阶段的和递推的最优子结构分析方法。 3.学会利用动态规划算法解决实际问题。 问题描述: 给定n种物品和一个背包。物品i的重量是wi,体积是bi,其价值为vi, 背包的容量为c,容积为d。问应如何选择装入背包中的物品,使得装入背包中 物品的总价值最大? 在选择装入背包的物品时,对每种物品只有两个选择:装入 或不装入,且不能重复装入。输入数据的第一行分别为:背包的容量c,背包的 容积d,物品的个数n。接下来的n行表示n个物品的重量、体积和价值。输出 为最大的总价值。 问题分析: 标准0-1背包问题,MaxV表示前i个物品装入容量为j的背包中时所能产生的最大价值,结构体objec表示每一个可装入物品,其中w表示物品的重量,v表示物品的价值。如果某物品超过了背包的容量,则该物品一定不能放入背包,问题就变成了剩余i-1个物品装入容量为j的背包中所能产生的最大价值;如果该物品能装入背包,问题就变成i-1个物品装入容量为j-objec[i].w的背包所能产生的最大价值加上物品i的价值objec[i].v. 复杂性分析 时间复杂度,最好情况下为0,最坏情况下为:(abc) 源程序 #include #include #include #include #include int V [200][200][200]; int max(int a,int b) {

回溯法和分支限界法解决0-1背包题

0-1背包问题 计科1班朱润华2012040732 方法1:回溯法 一、回溯法描述: 用回溯法解问题时, 应明确定义问题的解空间。 问题的解空间至少包含问题的一个 (最 优)解。对于0-1背包问题,解空间由长度为 n 的0-1向量组成。该解空间包含对变量的所 有 0-1 赋值。例如 n=3 时,解空间为: {(0, 0, 0), (0, 1, 0), (0, 0, 1) , (1, 0, 0), (0, 1, 1), (1, 0, 1), (1, 1, 0), (1 , 1, 1) 然后可将解空间组织成树或图的形式, 0-1背包则可用完全二叉树表示其解空间给定 n 种物品和一背包。物品i 的重量是wi ,其价 值为vi ,背包的容量为 C 。问:应如何选择装入背包的物品,使得装入背包中物品的总价值 最大? 形式化描述:给定 c >0, wi >0, vi >0 , 1 w i < n.要求找一 n 元向量(x1,x2,…,xn,), xi € {0,1}, ? 刀wi xi w c,且刀vi xi 达最大.即一个特殊的整数规划问题。 二、回溯法步骤思想描述: 0-1背包问题是子集选取问题。0-1背包问题的解空间可以用子集树表示。在搜索解空 间树时,只要其 左儿子节点是一个可行节点, 搜索就进入左子树。当右子树中有可能含有最 优解时,才进入右子树搜索。否则,将右子树剪去。设 r 是当前剩余物品价值总和, cp 是 当前价值;bestp 是当前最优价值。当 cp+r<=bestp 时,可剪去右子树。计算右子树上界的 更好的方法是将剩余物品依次按其单位价值排序, 然后依次装入物品, 直至装不下时,再装 入物品一部分而装满背包。 例如:对于 0-1 背包问题的一个实例,n=4,c=7,p=[9,10,7,4],w=[3,5,2,1] 品的单位重量价值分别为[3,2,3,5,4]。以物品单位重量价值的递减序装入物品。 品4,然后装入物品3和1.装入这3个物品后,剩余的背包容量为1,只能装 由此得一个解为[1,0.2,1,1],其相应价值为22。尽管这不是一个可行解,但可以证明其价 值是最优值的上界。因此,对于这个实例,最优值不超过 在实现时,由 Bound 计算当前节点处的上界。类 Knap 的数据成员记录解空间树中的节 点信息,以减少参数传递调用所需要的栈空间。 在解空间树的当前扩展节点处, 仅要进入右 子树时才计算上界 Bound,以判断是否可将右子树剪去。进入左子树时不需要计算上界,因 为上界预期父节点的上界相同。 三、回溯法实现代码: #i nclude "stdafx.h" #in clude using n ames pace std; temp late class Knap { temp latevciass Typ ew,class Typep> friend Typep Knap sack(T ypep [],T ypew [],T yp ew,i nt); private: Typep Boun d(i nt i); 。这4个物 先装入物 0.2的物品2。 22。

雅思口语关于travel问题重点短语及答案

口语: 表旅游的相关问题 1.Do you love travelling? 2.Where do you want to go travelling? 3.What is the real meaning of travelling? 4.What do you think about traveling with a travel agency?

Topic-描述travel时必备短语和句型 自然风景区natural landscape 大都市modern city 风景如画picturesque views 历史遗迹historical site 令人赞叹,影响深刻fantastic, awesome, impressive, unforgettable 舒适的cozy,comfortable 充满惊喜的a trip full of surprises Take group package tours 跟团旅游independent travel 自助游 Travel agency 旅行社Backpackers 背包客 Be fascinated by着迷Broaden horizon开拓眼见 ?Unwind/relax/release pressure 放松自我 ?Enrich the life 充实人生 ?Boost family/friend bonding 增进感情 ?Experience new customs 体验心得风俗 ?Explore new places and meet new people 探索新地方认识新朋友 ?Luggage can be really cumbersome 行李是累赘 ?Travelling is my favorite pastime旅游是我最爱的消遣方式 ?Time and money are two major factors that will determine where we travel, when and for how long时间和金钱是两个最主要的要素,决定我们去哪,什么时候去和去多久 表旅游的相关问题 1.Do you love travelling? Absolutely, I am a big fan of it. Travelling enables me to run away from all the hustle and bustle of the city and totally relax. Especially when we travel with our family, we can all enjoy the quality time. Besides, travelling can broaden my horizons and enrich my knowledge. 加分用法:

算法分析与程序设计动态规划及回溯法解背包问题

动态规划法、回溯法解0-1背包问题 2012级计科庞佳奇 一、问题描述与分析 1.动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会 有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。与分治法不同的是,适合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解的子问题的答案。 不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。这就是动态规划法的基本思路。具体的动态规划算法多种多样,但它们具有相同的填表格式。 多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有“动态”的含义,称这种解决多阶段决策最优化问题的方法为动态规划方法。任何思想方法都有一定的局限性,超出了特定条件,它就失去了作用。同样,动态规划也并不是万能的。适用动态规划的问题必须满足最优化原理和无后效性。1.最优化原理(最优子结构性质)最优化原理可这样阐述:一个最优化策略具有这样的性质,不论过去状态和决策如何,对前面的决策所形成的状态而言,余下的诸决策必须构成最优策略。简而言之,一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质。2.无后效性将各阶段按照一定的次序排列好之后,对于某个给定的阶段状态,它以前各阶段的状态无法直接影响它未来的决策,而只能通过当前的这个状态。换句话说,每个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。3.子问题的重叠性动态规划将原来具有指数级时间复杂度的搜索算法改进成了具有多项式时间复杂度的算法。其中的关键在于解决冗余,这是动态规划算法的根本目的。动态规划实质上是一种以空间换时间的技术,它在实现的过程中,不得不存储产生过程中的各种状态,所以它的空间复杂度要大于其它的算法。 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2……Wn,与之相对应的价值为P1,P2……Pn。求出获得最大价值的方案。 2.回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目 标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 在包含问题的所有解的解空间树中,按照深度优先搜索的策略,从根结点出发深度探索解空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。

0-1背包问题四种不同算法的实现要点

兰州交通大学数理与软件工程学院 题目0-1背包问题算法实现 院系数理院 专业班级信计09 学生姓名雷雪艳 学号200905130 指导教师李秦 二O一二年六月五日

一、问题描述: 1、0—1背包问题:给定n 种物品和一个背包,背包最大容量为M ,物 品i 的重量是w i ,其价值是平P i ,问应当如何选择装入背包的物品,似的装入背包的物品的总价值最大? 背包问题的数学描述如下: 2、要求找到一个n 元向量(x1,x2…xn),在满足约束条件: ????? ≤≤≤∑1 0i i i x M w x 情况下,使得目标函数 p x i i ∑max ,其中,1≤i ≤n ;M>0; wi>0;pi>0。满足约束条件的任何向量都是一个可行解,而使得目标函数 达到最大的那个可行解则为最优解[1]。 给定n 种物品和1个背包。物品i 的重量是wi ,其价值为pi ,背包的容量为M 。问应如何装入背包中的物品,使得装人背包中物品的总价值最大?在选择装人背包的物品时,对每种物品i 只有两种选择,即装入背包、不装入背包。不能将物品i 装人背包多次,也不能只装入部分的物品i 。该问题称为0-1背包问题。 0-1背包问题的符号化表示是,给定M>0, w i >0, pi >0,1≤i ≤n ,要求找到一个n 元0-1向量向量(x1,x2…xn), X i =0 或1 , 1≤i ≤n, 使得 M w x i i ≤∑ ,而且 p x i i ∑达到最大[2]。 二、解决方案: 方案一:贪心算法 1、贪心算法的基本原理与分析 贪心算法总是作出在当前看来是最好的选择,即贪心算法并不从整体最优解上加以考虑,它所作出的选择只是在某种意义上的局部最优解。贪心算法不是对所有问题都能得到整体最优解,但对范围相当广的许多问题它能产生整体最优解。在一些情况下,即使贪心算法不能得到整体最优解,但其最终结果却是最优解的很好近似解。 贪心算法求解的问题一般具有两个重要性质:贪心选择性质和最优子结构性质。所谓贪心选择性质是指所求问题的整体最优解可以通过一系列局部最优解的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。当一个问题的最优解包含其子问题的最优解时,称此问题具有最优子结构性质。问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。 2、0-1背包问题的实现 对于0-1背包问题,设A 是能装入容量为c 的背包的具有最大价值的物品集合,则Aj=A-{j}是n-1个物品1,2,...,j-1,j+1,...,n 可装入容量为c-wj 的背包的具有最大价值的物品集合。 用贪心算法求解0-1背包问题的步骤是,首先计算每种物品单位重量的价值vi/wi ;然后,将物品进行排序,依贪心选择策略,将尽可能多的单位重量价值最高的物品装入背包。若将这种物品全部装入背包后,背包内的物品总量未超过c ,则选择单位重量价值次高的物品并尽可能多地装入背包。

回溯法和分支限界法解决0-1背包题

0-1背包问题 计科1班朱润华 2012040732 方法1:回溯法 一、回溯法描述: 用回溯法解问题时,应明确定义问题的解空间。问题的解空间至少包含问题的一个(最优)解。对于0-1背包问题,解空间由长度为n的0-1向量组成。该解空间包含对变量的所有0-1赋值。例如n=3时,解空间为:{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1),(1,1,0),(1,1,1)}然后可将解空间组织成树或图的形式,0-1背包则可用完全二叉树表示其解空间给定n种物品和一背包。物品i的重量是wi,其价值为vi,背包的容量为C。问:应如何选择装入背包的物品,使得装入背包中物品的总价值最大? 形式化描述:给定c >0, wi >0, vi >0 , 1≤i≤n.要求找一n元向量(x1,x2,…,xn,), xi∈{0,1}, ? ∑ wi xi≤c,且∑ vi xi达最大.即一个特殊的整数规划问题。 二、回溯法步骤思想描述: 0-1背包问题是子集选取问题。0-1 背包问题的解空间可以用子集树表示。在搜索解空间树时,只要其左儿子节点是一个可行节点,搜索就进入左子树。当右子树中有可能含有最优解时,才进入右子树搜索。否则,将右子树剪去。设r是当前剩余物品价值总和,cp是当前价值;bestp是当前最优价值。当cp+r<=bestp时,可剪去右子树。计算右子树上界的更好的方法是将剩余物品依次按其单位价值排序,然后依次装入物品,直至装不下时,再装入物品一部分而装满背包。 例如:对于0-1背包问题的一个实例,n=4,c=7,p=[9,10,7,4],w=[3,5,2,1]。这4个物品的单位重量价值分别为[3,2,3,5,4]。以物品单位重量价值的递减序装入物品。先装入物品4,然后装入物品3和1.装入这3个物品后,剩余的背包容量为1,只能装0.2的物品2。由此得一个解为[1,0.2,1,1],其相应价值为22。尽管这不是一个可行解,但可以证明其价值是最优值的上界。因此,对于这个实例,最优值不超过22。 在实现时,由Bound计算当前节点处的上界。类Knap的数据成员记录解空间树中的节点信息,以减少参数传递调用所需要的栈空间。在解空间树的当前扩展节点处,仅要进入右子树时才计算上界Bound,以判断是否可将右子树剪去。进入左子树时不需要计算上界,因为上界预期父节点的上界相同。 三、回溯法实现代码: #include "stdafx.h" #include using namespace std; template class Knap { template friend Typep Knapsack(Typep [],Typew [],Typew,int); private: Typep Bound(int i);

0-1背包问题研究及算法策略比较分析

数学与物理科学学院 《算法分析与设计》课程考查论文 题目0-1背包问题研究及算法策略比较分析 专业 班级 学号 姓名 任课教师 完成日期2011/5/24

背包问题是一个在运筹学领域里常见的典型NP-C难题,也是算法设计分析中的经典问题,对该问题的求解方法的研究无论是在理论上,还是在实践中都具有重要意义。对这个问题的求解已经研究出了不少的经典方法,对该问题的探索和应用研究一直在进行。在先进理论指导下,求解0-1背包问题具有科学、高效、经济、灵活、方便等显著特点。 那么要解决背包问题,首要的前提就是设计出好的算法,想求得背包问题的解,就要先设计出算法,本文采用回溯法对背包问题、0-1背包问题及简单0-1背包问题进行算法设计和时间复杂度分析,给出具体算法设计和实现过程。并以具体实例详细描述不同方法求解问题解时算法基本思想,然后就解决0-1背包问题对这四种算法进行详细的比较,总结这种方法实现的优缺点并得出结论。如何将背包问题应用于实际问题中,有针对性地设计适合求解实际0-1背包问题的算法,并很好地解决实际问题,是计算机工作者不断思索、研究的一个领域。

摘要 (2) 一、绪论 (4) 1.1问题的研究及意义 (4) 1.20-1背包问题的算法研究与分析 (4) 1.3课题的主要研究内容 (4) 二、0-1背包问题在动态规划中的实现 (5) 2.1动态规划的基本原理与分析 (5) 2.20-1背包问题的实现 (5) 三、0-1背包问题在分枝-限界法中的实现 (7) 3.1分枝-限界法的基本原理与分析 (7) 3.20-1背包问题的实现 (7) 四、0-1背包问题在遗传算法中的实现 (9) 4.1遗传算法的基本原理与分析 (9) 4.20-1背包问题的实现 (10) 五、0-1背包问题在回溯法中的实现 (11) 5.1回溯法的基本原理与分析 (11) 5.20-1背包问题的实现 (11) 5.30-1背包问题在回溯法中的算法描述 (12) 5.4算法效率 (14) 5.5运行结果 (15) 六、四种算法的比较与分析 (15) 七、附录 (17)

驴友圈里的“三不借、三不问、三不准”

一、驴圈里的三不借 1、“水不借” 户外活动中水是非常重要的,重要到何种地步,电影、小说里常常有所阐述:那口渴的表情、干裂的嘴唇,那传递着谁也舍不得喝的一壶水,那危急时刻像甘露般珍贵的一口水…… 因为重要,所以一般情况下,每一位老驴都会根据路程来控制自己水壶的水量,永远不让自己的水壶断水。而菜驴(新驴)就缺少经验了,有的竟然敢不带水壶就上路,有的上路没喘气多久就猛灌水,有的干脆自己的喝完了就向别人讨水喝:“大哥,借我喝一口水……” 借水不只是卫生一方面的事情,除你的口水我不想品尝外,自救更是重要的一方面。深山老林里是买不到矿泉水的!矿泉水的水瓶经不起开水烫,到营地时是需要补给开水的,一烫就瘪,很不好用。 所以,每一位驴友出行时,都会带上自己的专业水壶(硬塑、铝制或不锈钢水壶),并非常注意自控自己水壶内的水量,很少会缺水断水! 2、“光不借” 户外活动中的光源包括:手电、头灯、蜡烛、火柴、化学热力带和罐装点热器等,这些都是消耗品。除公用装备外,一般情况下是不外借的。菜驴就缺少经验了,白天觉得手电多余,夜晚一有事就向别人借:“大哥,我急死了急死了,手电快借我用一下……” 为减少户外出行的负重,通常下出行自备的物品只是满足个人使用,消耗完了,野外是买不到电的,有人说“买不到电就充电嘛。”去你的大头鬼吧,插到你的鼻孔里去充电哦! 所以,每一位驴友出行时,务必要带上自己的专业光源(手电、头灯、电池),而且开关要牢靠,以防放在包中被无意打开。 3、“睡袋不借” 睡袋不借。不是有老驴笑说嘛:过去我是书不外借、老婆不外借,现在我郑重加一条,睡袋不外借。问他为什么?他说:非常不卫生。是啊,暴走一天了,常常是没有水,擦一擦身子、洗一洗脚,就得钻进睡袋里睡了,自己的汗臭、臭脚臭就算了,别人的那还了得?而菜驴就缺少经验了,觉得买个睡袋划不来,就向别人借:“大哥,我是小丽,明天我去野营,睡袋借我用一下……” 睡袋一旦借出还能还其本来面目吗?还给我时多了臭气不会好,熏得我老作恶梦!多了香气也不好呀,熏得我老做邪梦!再说了,谁知道你那臭体、香体的有什么传染病、皮肤病、艾艾病,那的确是非常不卫生的。 所以,每一位驴友出行时,务必要带上自己的睡袋,哪怕带上最薄的最便宜的那种双面绒睡袋也行,这样把别人的被褥、大衣压在上面,别人也就不生闷气了。

算法 0-1背包问题

一、实验目的与要求 掌握回溯法、分支限界法的原理,并能够按其原理编程实现解决0-1背包问题,以加深对回溯法、分支限界法的理解。 1.要求分别用回溯法和分支限界法求解0-1背包问题; 2.要求交互输入背包容量,物品重量数组,物品价值数组; 3.要求显示结果。 二、实验方案 在选择装入背包的物品时,对每种物品i只有2种选择,即装入背包或不装入背包。不能将物品i装入背包多次,也不能只装入部分的物品i。 三、实验结果和数据处理 1.用回溯法解决0-1背包问题: 代码: import java.util.*; public class Knapsack { private double[] p,w;//分别代表价值和重量 private int n; private double c,bestp,cp,cw; private int x[]; //记录可选的物品 private int[] cx; public Knapsack (double pp[],double ww[],double cc) { this.p=pp;this.w=ww;this.n=pp.length-1; this.c=cc;this.cp=0;this.cw=0; this.bestp=0; x=new int[ww.length]; cx=new int[pp.length]; } void Knapsack() { backtrack(0); } void backtrack(int i) { if(i>n) { //判断是否到达了叶子节点 if(cp>bestp) { for(int j=0;j

相关文档
相关文档 最新文档