关于《算法导论》!
买了本机械工业出版社的《算法导论》,看的实在是太吃力了!
小弟在此向各位前辈请教学习方法、心得,望各位前辈赐教!先行谢过!
[解决办法]
一点一点做试验,动手看书
[解决办法]
是不是先熟悉一下数据结构会更好
[解决办法]
上学期我们也学过了算法,老师说本科生的要求只要理解就行,我们还真就信了,今年暑假在学校参加acm俱乐部才发现算法是要从写代码中来体会的...
[解决办法]
我也正在看这本书,英文原版。
感觉很爽!
[解决办法]
我今天下午就是研究全排序,不动手根本就不理解那些抽象的数学公式.
using System; using System.Collections.Generic; namespace Permulation { class Program { static void Main(string[] args) { List <AnyType > L = new List <AnyType >(); L.Add(new AnyType(1)); L.Add(new AnyType(2)); L.Add(new AnyType(3)); L.Add(new AnyType(4)); L.Add(new AnyType(5)); L.Add(new AnyType(6)); List <List <AnyType > > P = new List <List <AnyType > >(); P = Permulation(L); showPerm(P); Console.WriteLine(P.Count); Console.Read(); } /// <summary > /// 排列函数。 ///设R={r1,r2,...,rn}是要进行排列的n个元素,Ri=R-{ri}.集X中元素的全排列记为Perm(X), ///(ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列.R的全排列可归纳定义如下: ///当n=1时,Perm(R)={r},r是集合R中唯一的元素. ///当n >1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),....(rn)Perm(Rn)构成 /// </summary > /// <param name="L" >输入的数字列表 </param > /// <returns >返回超集 </returns > static List <List <AnyType > > Permulation(List <AnyType > L) { List <List <AnyType > > P = new List <List <AnyType > >(); for (int i = 0; i < L.Count; i++) { P = SecondStep(L[i], P); } return P; } /// <summary > /// 第一步:求(ri)Perm(X) /// (ri)Perm(X)表示在全排列Perm(X)的每一个排列前加上前缀ri得到的排列 /// </summary > /// <param name="ri" >输入数字 </param > /// <param name="PermX" >输入集合 </param > /// <returns >返回数字和集合合并后的超集 </returns > static List <List <AnyType > > FirstStep(AnyType ri, List <AnyType > PermX) { List <List <AnyType > > resultFirstStep = new List <List <AnyType > >(); for (int m = 0; m < PermX.Count + 1; m++) { List <AnyType > tempPerm1 = new List <AnyType >(PermX); if (m < PermX.Count) { tempPerm1.Insert(m, ri); } else { tempPerm1.Add(ri); } resultFirstStep.Add(tempPerm1); } return (resultFirstStep); } /// <summary > /// 第二步: /// 当n=1时,Perm(R)={r},r是集合R中唯一的元素. ///当n >1时,Perm(R)由(r1)Perm(R1),(r2)Perm(R2),....(rn)Perm(Rn)构成 /// </summary > /// <param name="r" >输入数字 </param > /// <param name="PermR" >输入集合的集合 </param > /// <returns >返回数字和集合合并后的超集 </returns > static List <List <AnyType > > SecondStep(AnyType r, List <List <AnyType > > PermR) { List <List <AnyType > > result = new List <List <AnyType > >(); if (PermR.Count == 0) { result.Add(new List <AnyType >(new AnyType[] { r })); } else { for (int i = 0; i < PermR.Count; i++) { result.AddRange(FirstStep(r, PermR[i])); } } return (result); } /// <summary > /// 显示结果的。 /// </summary > /// <param name="P" > </param > static void showPerm(List <List <AnyType > > P) { for (int i = 0; i < P.Count; i++) { for (int j = 0; j < P[i].Count; j++) { Console.Write(P[i][j].Value + " "); } Console.WriteLine(); } } } /// <summary > /// 用来试验的类 /// </summary > public class AnyType { public AnyType(int x) { v = x; } private int v; public int Value { get { return v; } set { v = value; } } } }
[解决办法]
不要只看书.
多动手,多实践,你会迷上她的!
不过,如果你是为了应付考试,那就另当别论了.
[解决办法]
是本好书
[解决办法]
哈哈 抽象的数据类型 ADT 看看 C Primer Plus 的最后章
[解决办法]
有点厚
[解决办法]
先随便找找数据结构的书看看吧,至少有基础才行。然后就可以看CLRS了,其实大部分内容也挺基础的,难的先别看了