数据结构的作业之一,看了一篇介绍算法的文章,做了这个程序,压缩/解压可以实现,但是问题还是很多,没有使用价值。
- 不支持非ASCII字符集
- 只可以压缩txt文档
- 压缩效果不理想,文件稍大就要压很长时间
基于学习交流的想法,还是放上来,希望对自己对别人都能有所帮助,内附源码。
人生百态,程序万千
数据结构的作业之一,看了一篇介绍算法的文章,做了这个程序,压缩/解压可以实现,但是问题还是很多,没有使用价值。
基于学习交流的想法,还是放上来,希望对自己对别人都能有所帮助,内附源码。
FOSS4W今天刚刚发布了第一版ISO软件合集,专用Logo也在这一天公布,另外还附送一张广告
。
Logo:
公益广告:
欢迎也希望各位对开源软件报有爱心的朋友能够在你的blog或是网页上添加FOSS4W的Logo链接,这将给我们带来极大的支持!您只需要在网页中适当位置加入下面这段代码即可:
FOSS4W项目简介:FOSS4W全称为OpenSource and Free Software For Windows,是由浮图实验室发起的一项公益性项目,依托大学环境为主体,旨在培养开源文化,使windows平台下的用户也可以体验到自由软件带来的乐趣。我们提供一个平台,由志愿者来添加软件条目,不定期的统一打包发布,方便使用者,免去了到处下载的痛苦。更多介绍请到我们的页面来了解。
原文出处:http://dev.csdn.net/develop/article/50/50124.shtm
标题:数据库设计经验
作者: xlovem
这里只是阅读后的摘抄,如果对这篇文章感兴趣请阅读原文。
注解颜色说明:红色代表我没看懂 蓝色代表我认为很有用 橙色是我的注解
终于看完了,有几点是新的收获,比如姓名字段的打散,字段空间的可扩展性等。不过也引发了很多问题:数据库索引、触发器等的概念和使用、对数据库速度的影响因素几个因素的权重、读写查询更新等操作对数据库的要求和各自的速度。这些都是涉及大型数据库应该考虑的,不过我们暂时还考虑不到这么高的层次,毕竟还没有经验,而且面对的也不是大型的商业项目,可以暂时不放在最重要的地位考虑。
Initiators:Sun Zhigang.Xie
Yubo,Wu Jin
Team Member:Liu Shi(Member of FoOTOo
Lab) Jiang Zhanyong Frank
Director:Wu Jin(Member of
FoOTOo Lab)
Website:
http://wiki.hit.edu.cn/index.php/OpenSource_and_Free_Software_For_Windows
http://www.footoo.org/index.php?option=com_content&task=view&id=35&Itemid=49
Introduction:
FOSS For Windows全称为“Free and Open Source
Software for Windows”,是一项由浮图实验室发起,旨在推广开源理念、为广大用户提供替代Windows下专属软件的开源软件或免费软件列表以及自由软件发布的公益项目。项目服务采用Wiki的形式,允许任何热心开源事业的人参与到共建项目中来,您可以在此发布您的自由软件,您也可以建立您心中的最优秀的开源软件、自由软件的条目,您还可以对别人已经建立的条目做出您的批改,来共同书写一个完全替代Windows下专属软件的开源软件知识库。我们会在适当的时间将优秀软件打包集中发布,方便使用者的下载和使用。
Feature:
我们的目标是——汇聚开源力量,共建自由天空。
我们的梦想是——用国人编写的世界级优秀自由软件取代FOSS For Windows列表中的所有软件!
今天又听说了一个google的软件——google sketchup。一个用户建立3D模型的软件,可以把模型导入到google earth里,似乎以后又让用户来丰富earth里的模型库的意向。不过,我关心的是这个模型文件保存的格式.kml,一看就怀疑和xml有关,下载了一个文件用notepad++打开,发现真的是xml,原来模型数据都是用xml的格式来保存的。xml的前途真的是一片光明!各种用途真是不少,真有必要好好学学,主要是创新的使用思路!
在首页上看到爱因斯坦20世纪初出的谜语 98%人答不出 ,想了一下,发现用图论的思路有希望编程解决。
原体如下:
1、在一条街上,有5座房子,喷了5种颜色。
2、每个房里住着不同国籍的人
3、每个人喝不同的饮料,抽不同品牌的香烟,养不同的宠物
问题是:谁养鱼?
提示:
1、英国人住红色房子
2、瑞典人养狗
3、丹麦人喝茶
4、绿色房子在白色房子左面
5、绿色房子主人喝咖啡
6、抽Pall Mall 香烟的人养鸟
7、黄色房子主人抽Dunhill 香烟
8、住在中间房子的人喝牛奶
9、 挪威人住第一间房
10、抽Blends香烟的人住在养猫的人隔壁
11、养马的人住抽Dunhill 香烟的人隔壁
12、抽Blue Master的人喝啤酒
13、德国人抽Prince香烟
14、挪威人住蓝色房子隔壁
15、抽Blends香烟的人有一个喝水的邻居
五个房子、五种颜色、五个人、五种饮料、五种香烟、五种宠物
一共是30个节点,每个节点都可以和不属于自己同类的另外25个点建立连接。两点间的连接就代表了两个事物间建立了从属的关系。那么,15个提示就是15个条件,其中1、2、3、5、6、7、8、9、12、13这些条件指名哪些边是确实存在的,而10、11、14、15则隐式的给出哪些边是不存在的,第4条提示不能直接给出有用信息,可以作为验证条件。
于是,可以先建立一个30*25的矩阵,每个点代表一个边,初值设为UNKNOWN,然后输入条件,第一类条件使得对应的边的值改变为TRUE,第二类条件使得对应边的值变为FALSE。之后,就是在这个矩阵基础之上寻找算法使得30个点恰可以分为5个线性表,并且包含值为TRUE的边,不含值为FALSE的边,找到一组后用第三组条件来验证,如果通过验证则为一组解。
所以接下来关键就是怎样找出五个线性表了。首先应该找出值为TRUE的点组成的森林中的最长路,从这条路出发,用穷举的方法补全它的顶点。流程大概是:1 找出最长路-〉2 在这条路上增加一个节点,如果成功则进行3,如果失败,则取消最后建立连接的那条边,重复2-〉3 如果路的长度达到最大(6),则将这条路的顶点从顶点集中去除,重复步骤1~3;如果长度小于最大值(6),则重复2、3-〉直道找到五条线性表,输出成功退出;若穷举找不到结果,则输出失败标志返回。
这个算法基本上和人脑算的思路是一样的,效率很低,不知道有没有什么更高效的算法。我的这个算是抛砖引玉了,等待高手的指导。
keyword: jdom donews xml
学了jdom的皮毛,总想做点什么试验,于是就试着提取donews blog的评论。
建了两个内含类,SearchArticles用于提取blog首页的文章入口URL,并提取其中的每篇文章的rss链接地址,保存在ArrayList中。SearchComments用于提取一篇文章的所有评论,并输出打印。
要分析提取首先要知道XML文件的树型结构,donews blog的结构如下(你也可以在任何一个blog首页后链接加上"/rss.aspx" ,例如:“blog.donews.com/grammerliu/rss.aspx” ):
<rss version="2.0">−<channel><title>记录我的人生岁月</title><link>http://blog.donews.com/grammerliu/</link><description>人生百味,程序万态</description><dc:language>zh-CHS</dc:language><generator>.Text Version 0.958.2004.2001</generator>−<item><dc:creator>死牛</dc:creator><title>你在游戏中会是什么角色?</title>−<link>
http://blog.donews.com/grammerliu/archive/2006/04/19/836957.aspx
</link><pubDate>Wed, 19 Apr 2006 19:19:00 GMT</pubDate>−<guid>
http://blog.donews.com/grammerliu/archive/2006/04/19/836957.aspx
</guid>−<wfw:comment>http://blog.donews.com/grammerliu/comments/836957.aspx</wfw:comment>−<comments>http://blog.donews.com/grammerliu/archive/2006/04/19/836957.aspx#Feedback</comments><slash:comments>0</slash:comments>−<wfw:commentRss>http://blog.donews.com/grammerliu/comments/commentRss/836957.aspx</wfw:commentRss><trackback:ping>http://tb.donews.net/TrackBack.aspx?PostId=836957</trackback:ping>−<description><p>http://vega.cs.tku.edu.tw/~u7197120/RPG_Test.htm <br/></p><p>刘奭的個人資料</p><table width="49%" height="184" border="1"><tbody><tr><td rowspan="6" colspan="2"><div align="center"><img width="109" height="133" src="http://vega.cs.tku.edu.tw/%7Eu7197120/face/tsb.jpg" alt=""/></div></td><td width="36%"><div align="center">攻擊</div></td><td width="31%"><div align="center">63</div></td></tr><tr><td><div align="center">防禦</div></td><td><div align="center">62</div></td></tr><tr><td><div align="center">敏捷</div></td><td><div align="center">81</div></td></tr><tr><td><div align="center">耐力</div></td><td><div align="center">41</div></td></tr><tr><td><div align="center">意志</div></td><td><div align="center">93</div></td></tr><tr><td><div align="center">智商</div></td><td><div align="center">81</div></td></tr><tr><td width="17%"><div align="center">種族</div></td><td width="16%"><div align="center">天使</div></td><td><br type="_moz"/></td><td><br type="_moz"/></td></tr><tr><td><div align="center">職業</div></td><td><div align="center">弓箭手</div></td><td><div align="center">屬性</div></td><td><div align="center">風</div></td></tr></tbody></table><br/>呵呵,挺有趣。<br/>风,不错,风中飞翔的天使。<br/><img src ="http://blog.donews.com/grammerliu/aggbug/836957.aspx" width = "1" height = "1" /></description></item></channel>
</rss>需要注意的只有两点:前面是对于整个blog的信息介绍,每篇文章都保存在一个item结构中。其中,先是说明命名空间的标签在用jdom提取的时候要注意用getChild(string arg0 , Namespace arg1)相应的指明Namespace,否则将不能成功提取节点元素。
代码如下:
package edu.hit.ibmclub.liushi;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
public class DonewsComment {
/**
* @param args
* @throws IOException
* @throws JDOMException
*/
public static void main(String[] args) throws JDOMException, IOException {
//SearchComments( "http://blog.donews.com/grammerliu/comments/commentRss/816014.aspx");
String startPoint = "http://blog.donews.com/grammerliu/rss.aspx"; //修改这个URL,可使其指向别的blog
ArrayList comments = SearchArticles(startPoint);
Iterator itera = comments.iterator() ;
while(itera.hasNext()){
String url = (String)itera.next() ;
SearchComments(url);
}
}
public static ArrayList SearchArticles(String url) {
SAXBuilder factory = new SAXBuilder();
Document doc = null;
Element rssRoot = null;
Element channel = null;
List items = null;
ArrayList commentsURL = null;
try{
doc = factory.build( url);
rssRoot = doc.getRootElement() ;
channel = rssRoot.getChild( "channel");
//System .out .println(channel.getName()) ;
String bloggerTitle = channel.getChildText ( "title");
String linkURL = channel.getChildText ( "link");
items = channel.getChildren( "item");
commentsURL = new ArrayList();
System.out.println(bloggerTitle + "\n" + linkURL + "\n") ;
}catch(Exception e){
}
Iterator node = items.iterator();
while(node.hasNext()){
Element item = (Element) node.next() ;
Element commentRss = item.getChild( "commentRss" ,Namespace.getNamespace( "http://wellformedweb.org/CommentAPI/"));
commentsURL.add( commentRss.getText());
//System.out.println(commentRss.getText());
}
return commentsURL;
}
public static void SearchComments(String url) {
SAXBuilder factory = new SAXBuilder ();
if(url == null){
return;
}
try{
Document doc = factory.build( url);
Element root = doc.getRootElement() ;
Element channel = root.getChild( "channel");
String title = channel.getChildText( "title");
String link = channel.getChildText( "link");
System.out.println("Title:"+ title + "\nLink:" + link) ;
List item = channel.getChildren( "item");//.getChildren() ;
Iterator node = item.iterator();
int i=1;
while(node.hasNext() ){
Element comment = (Element) node.next();
System.out.println(i+"."+ comment.getChildText( "description")+"\n" + "————"+comment.getChildText( "creator" , Namespace.getNamespace( "http://purl.org/dc/elements/1.1/"))) ;
i++;
}
System.out.println() ;
}catch(Exception e){
}
}
}
提取的结果如下:
记录我的人生岁月
http://blog.donews.com/grammerliu/
Title:从今开始
Link:http://blog.donews.com/grammerliu/archive/2006/04/19/836805.aspx
1.看见了,那个小计数器,呵呵
————磁盘碎片
Title:我的话语权
Link:http://blog.donews.com/grammerliu/archive/2006/04/19/836728.aspx
1.如果是在紫丁香上,很多字眼都会被莫名其妙的审查,google还算开放的了呢
————磁盘碎片
Title:2006-04-16 调查问卷
Link:http://blog.donews.com/grammerliu/archive/2006/04/16/831343.aspx
1.被我发现了,“死牛”就是你呀,哈哈~~
————钊
2.嗯,就是我。
————死牛
Title:Renju归来
Link:http://blog.donews.com/grammerliu/archive/2006/04/15/829423.aspx
1.搞了半天,就是五子棋阿。祝贺……第几名阿?
————talengyan
2.你语文怎么学的呀?不说了是第六么,真是的,小心贺老找你!
<br>小声地告诉你:入党申请什么的我还没写过了。入党我没想过。
————死牛
3.居然不小心错过了
<br>不然肯定拿第一啦,哈哈
————Kimi
4.这么狂?哈哈,哪天先比划比划?!16928982工大五子棋爱好者之家
————死牛
Title:高级程序员的多女友处理原则
Link:http://blog.donews.com/grammerliu/archive/2006/04/13/826377.aspx
1.well, I misunderstand u at the first sight of this topic. However, it’s clear!
————frank
2.java程序员有一点问题,就是你根本不知道你的女朋友什么时候被处理掉……
<br>也就是说,一旦决定抛弃你的女朋友的时候,你不知道你的“前”女友是否还在你身边的某个地方……
<br>挺渗人的
————磁盘碎片
3.看来把编程序和找女朋友联系在一起,使程序员的通病
————lianggo
4.没办法,大多找不到女朋友,只好纸上谈兵,汗。
————死牛
Title:第三堂党课
Link:http://blog.donews.com/grammerliu/archive/2006/04/11/823549.aspx
1.我妈今天连打了两个电话催我回来,居然就是要逼我入党!
<br>死牛啊,你那些思想汇报之类的有没有电子版发给我哈
————talentyan
2.跟你说过无数次了
<br>
<br>我要加入的是共产党,在这里就是中国共产党
<br>
<br>现今存在的是党员的问题和制度的问题,党本身的属性和特性是没有错的
<br>
<br>抛开功利化的理由去说话,我要做的事情,不需要看别人的表现,而我相信我的所作所为符合一名共产党员的要求,也相信我的所作所为应当由共产党的理念和制度来约束(注意,不是特指哪一个党),所以我要加入共产党
<br>
<br>信不信仰为人民服务是一回事,信不信仰共产主义又是另一回事
<br>相不相信共产党是一回事,相不相信中国共产党又是另一回事咯
<br>
<br>给你两个选择:
<br>1.共产党本身就没什么意义
<br>建议你多用政治的思路去分析一些问题,了解一下“讲政治”的内涵
<br>2.中国共产党没什么意义
<br>你可以选择问心无愧的心态或加入并改造之的心态
<br>
————某人
3.说得不错,可以接受。
<br>但是这一点还是不太同意:
<br>现今存在的是党员的问题和制度的问题,党本身的属性和特性是没有错的
<br>党本身的正确性是需要实践来证明的,单独信仰上的正确性不足以说服信仰之外的人,用中国共产党的话说就是“事实是检验真理的唯一标准”。这一点不是争论可以解决的,需要时间来证明。
<br>对于政治,确实以前不太关心,不过以后离不开它,还是应该关心,和信仰无关。
<br>你说的话,算是80%可以接受。
————刘奭
Title:数据结构的大作业——航空售票系统
Link:http://blog.donews.com/grammerliu/archive/2006/04/10/821740.aspx
1.呵呵,我也要好好学C++
————frank
2.没什么,其实用java作也挺好的,反正学的是数据结构,语言的选择都是次要的
————Kimi
3.咱们的数据结构可以用java做么?
————磁盘碎片
4.据称可以
————wywcgs
Title:哈尔滨06年的第一场春雨
Link:http://blog.donews.com/grammerliu/archive/2006/04/09/819832.aspx
1.做卫生的还有我
————磁盘碎片
2.所以才更不好意思丢下不管了。
————死牛
3.你好像没来吧?
————frank
4.不好意思 原本想去的 后来一看表都58了 就没过去 懒吧
————死牛
Title:交流
Link:http://blog.donews.com/grammerliu/archive/2006/04/08/819171.aspx
1.说起交流,刚上完选修课“成功心理学”的我也很深有感触啊。确实是一门好课,虽然有的活动是老套了一点,但是能认识那么多真心(至少目前是真心的)的朋友,确实是一件益事。不知道你上过没有,虽然我知道你在“成功心理”这方面不需要更多的指导,但是我还是推荐你去上一次。
————frank
2.可以考虑,先把想上的选修都上了再说。
————死牛
Title:读《未来的社区》的几点惊奇发现
Link:http://blog.donews.com/grammerliu/archive/2006/04/06/816014.aspx
1.让我想起了我的读书笔记“Feel Quality Education in America”,呵呵
————frank
2.记得刚入学的时候,学生会要求每个人添一份个人情况调查表,其中有一个问题,大概意思是说,当你离开这个世界的时候,你希望世人如何评价你呢?这个问题与“我想要人们因为什么而记住我”有类似的含义;我当时思索了好久,也不记得是怎么回答的啦。如果是刘奭会怎么回答呢?
————kimi
3.我只希望人们能够记住我,越久越好。能够被更多的人记住,能够被更多的普通人记住,而不仅是被列入史册,能在口碑中流传将是我生命的延续,让我可以觉得自己还活在世上
————刘奭
4.faint
<br>这样太在意别人的看法了吧?
<br>别人怎么看我是他们自己的问题,只要自己感觉爽了,那就好了。以别人来证明自己的存在,不是什么好方法啊
————wywcgs
5.一个人只活在自己心里,他就只属于自己,死去后就灰飞烟灭;当他活在别人心中,便摆脱的生命的肉体形式,精神长存。我不愿当我的肉体消失时,留不下任何可以证明我存在过的东西,所以才可望精神的留存,算作是我对人世的留恋吧。
————死牛
Title:奭说新语(一)
Link:http://blog.donews.com/grammerliu/archive/2006/04/05/813165.aspx
1.这名字起得好啊
<br>要不人还不认识
————零度
2.刘大师的讲座,不听不行啊!
————ocean
3.别,大师听这怎么就那么像**功呢?
————死牛
4.全面发展固然重要,但是对于那些全面发展有阻力的人,是不是应该考虑发展特长呢?试想,一只营养不良的豪猪,与其长出浑身短短、钝钝或软软的刺,还不如象侏罗纪的恐龙学习,在某个部位集中生长质地坚硬的刺,倒也是一门绝技!现在也有很多一着先吃遍天的例子。而且这个社会还是很重视特长的,这就是为什么用人单位的履历表中总要有“特长”这一项;陌生人相识目无全牛,第一印象总是你的某一个或是某些特点或特长;这可能也是目前社会分工细化的一个必然趋势。不过,我的部长还是很全面的,这就是相处时间长了,却总是给人带来新鲜的感觉,也是我比较欣赏“死牛”的地方。
<br>呵呵,说多了,期待“奭说新语”的升级版本!
————kimi
5.谢谢大哥的夸奖,不过我指的"豪猪"不是一个人,而是一个集体,每个人只是一棵刺,强调的就是个性化的发展,独专一长。咱俩的观点并无矛盾。
————死牛
6.能不能不说豪猪?我不喜欢!原因我就不在这里说了
————frank
今天下午数据结构课偶得:
c程序员:不得不仔细处理的自己处理每一个女友,要注意女友的有效范围,进出函数、返回调用、实参形参,真真假假、虚虚实实,弄不好就错把小丽当成了小美,惹得系统报警,后果严重。
c++程序员:和C没有什么不同,被整得团团转,唯一的好处是可以取个别名,以防随便就弄错了,还算是有点进步,减少了危机产生的可能性,但是还是不爽。特别是new,如果不手动出手的话,早晚有一天会找上门,找你的麻烦,所以一定要随时掌握手中的资源,记得收尾工作一定做好。
Java程序员:相比之下,Java的优势很明显,完全不用考虑后期收尾的工作,因为有别人专门给你做,完全自动,不留后患,你大可不断的、毫无顾虑的寻找新目标。
以上不代表本人情感观点,纯技术分析 。
下午要编数据结构的大作业,开始用C++编,结果搞不清include的结构,又有两个类互相要使用对方作为参数,交织在一起,像一团乱麻。
上网搜了一下C++ include,搜到这个网站,原来include和namespace是这样用的,结构感觉有些像Java的package,但是远没有他清楚,还需要.h文件的配合,整得那么乱,不像Java里只需要指明包的名称,使用时直接import就行了。
应该是没学过的原因,感觉C++用起来特别的不顺手,什么都要自己做,连一个基本的Date Time类都是自己写的,真是从零件开始造车。
晚上接着编,再体验一下C++的风格。
由于习惯了使用eclipse,可是数据结构的可又要用C++来编,所以打算给eclipse装上cdt。
去网上下载了cdt的包(注意eclipse的版本,eclipse3.1要用cdt3.0.*),解压,添加到eclipse/plugins eclipse/features 里,就完成了cdt的安装。
之后打开eclipse,发现没有显示cdt插件,打开 Help->Software Updates->Manage Configuration,将“Show disable features”点选开,在左边很容易就会找到Eclipse C/C++ Development Tools 3.0.2 的选项,发现前面的图标是被禁止的样式,于是启用。这样在New里就可以看到C/C++的相关项目了。
接下来,写了点代码,又发现不能编译。提示“Launch failed no binaries”,缺少目标二进制文件,也就是没有编译。想来是cdt不提供编译器,只好去网上下MinGW(但是不知道为什么不用VC的编译器,环境变量里应该自动设过了)。
安装之后,还需要手工设定系统环境变量。(我的电脑-〉属性-〉高级-〉环境变量)
在path中添加你的MinGW安装路径,如下: e:/MinGW/bin
为了说得明白些,对新手有点帮助,具体举个例子:
比如现在我的MinGW安装在E盘根目录下,文件夹名字为mingw
%path% —— 带指环境变两种原有的值(value),这个不用改,直接在后面添加就行。
%MinGW_Path% —— 你的MinGW安装路径,我这里就是“e:/mingw”
那么,需要做的就是在path的值里增加这样一段(一般在最后,方便)
%path%;%MinGW_Path%/bin
具体说就是这样 ;e:/mingw/bin
注意最前面的是分号,表示与前面的参数分开。
之后按照这种方法,将lib、include也设定好,指向%MinGW_Path%/lib %MinGW_Path%/include
这样,再启动eclipse,你就可以建立并编译你的C/C++工程了。
用了这个才发现编译C/C++真的需要生成很多文件,不是VC里简单的点两下的问题,明白编译原理对认识编程真得很重要,下学期开着门课的时候一定认真上。