《算法导论》求解释
楼上说的类,在书中没有用到,有一些数据结构用结构体实现,比如学生,可以用结构体表示: 学生 { 姓名; 学号; } 姓名和学号就是学生的属性或域,学生就是一个结构体,或所谓的“对象”。
c语言中经典的算法!
Algorithms 算法概论 短小精悍,别据一格,准经典之作。一个坏消息: 同
算法导论,该书没有习题
答案。好消息:习题很经典,难度也适中,只需花点点时间自己也都能做出来。不好也不坏的消息:我正在写习题的
答案,已完成前三章,还剩九章约二百道题,顺利的话二个月之后发布。另有中文版名《算法概论》,我没看过,不知道翻译得怎么样。如果有心的话,还是尽量看原版吧,其实看原版与看中文版花费时间不会相差很大,因为大部分时间其实都花费在做习题上了。 编程之美--微软技术面试心得 虽说是一本面试书,但如果把前面十几页扯掉的话,我更愿意把它看作是一本讲解题思维的算法小品。在书中,作者通常是给出一个平常解法,然后再一次又一次的优化改进,你可以很清楚的看到基本的算法设计思想是如何得到运用以解决实际问题的。如果你已经有了一些算法的基础,看完本书应该能使你的算法应用能力得到一定的提高。另外,本书生动有趣,也同样适合于初学者。 算法艺术与信息学竞赛 如果
算法导论是九阳神功,那这本无疑就是九阴真经。本书是专为参加一些诸如ACM之类程序设计比赛的同学而写的,江湖人称“黑书”。里面讲的都是一些在编程比赛中常用的算法、数据结构,以及一些数论和计算几何等。
请教算法导论这本书怎么样?适合什么程度的学习者?
可以。算法领域本身更偏逻辑,你不看C和数据结构都可以看它。不过对大多数人来说开始看它的时候至少已经掌握一种编程语言了。看这本书本身需求的更多还是数理方面的能力,如果你是那种从小喜欢数学的类型,看起来应该没问题,如果一提数学就头疼,那就要多考量了……
算法导论是一部经典的书,无论是从兴趣还是从功利角度出发都值得一读,视个人能力不见得全读完读懂,只读前半部也是好的;有困难的部分也可以先跳过;复杂的数学证明看不懂或者记不下来只记结论也可以,都比完全没看过强。以后找工作面试的时候都是有好处的,尤其是顶尖的大公司。很多大公司面试爱考算法,因为算法能力比较直接的反应了受试者的在计算机领域的专业素养和智力水准,软件工程师毕竟是一个有智力门槛的职业;大公司不缺投简历的,买方市场,所以就会想掐尖,抛出这些挑战性很强的检验方法。 如果你的提问是用来考量本书是否值得买,
答案是肯定的,哪怕一时看不懂,也可以以后看。
数论证明题:证明对任意整数a,b,n,如果n|ab且gcd(a,n)=1,则n|b
|n|ab 推出 存在 K,使得 ab=nK; gcd(a,n)=1 推出 存在 u,v,使得 ua+vn=1; 对上式两端同时乘以b,有 uab+vnb=b; 代入第一式有:unK+vnb=b; 即 n(uK+vb)=b 所以 n|b
算法导论 编译原理 离散数学 数据结构与算法分析(这是一本) 阅读顺序?
先学离散数学,再
算法导论,至于编译原理 算法分析这两本不挨着,随便哪本先都可以。如果你是计算机专业的,第一年会学数据结构和c程序设计的(有些学校学C++),这个够了。编译原理比较抽象也比较底层,离编程远些。
《算法导论》第三版 16.3-9怎么解啊?望高手指点!
对于一个k字节的文件而言,合理的压缩应该得到一个不超过k字节的文件,也就是说我们假定对于任何一个文件压缩结果都不能变长
然后考虑所有长度不超过k字节的文件,这样的文件总共有T=256^k+256^{k-1}+...+256+1个,它们两两不同,总长度是L=k*256^k+(k-1)*256^{k-1}+...+1*256+0*1
把这些文件每个都压缩一下,得到T个新的文件总长度不超过L,且也必须两两不同(否则无法解压),真正的压缩结果应该得到总长度严格小于L的情况
但是由排序不等式知L是优化问题 min sum x_j*256^j 在约束条件0<=x_j<=256^j且 sum x_j=T 的最优解(这里0<=j<=k),取到这个最优解当且仅当 x_j=256^j,
(直观的讲法就是T个两两不同的文件总长度最短的情况只能是0字节的有1个,1字节的有256个,……,k字节的有256^k个)
所以压缩后总长度不变,也就是说没有真的压缩掉什么信息
162(2x9)简便算法导论
162÷(2x9)简便
算法导论 =162÷2÷9 =81÷9 =9
求指教《算法导论》
是插入排序算法啊。
插入算法的设计使用的是增量(incremental)方法:在排好子数组A[1..j-1]后,将元素A[j]插入,形成排好序的子数组A[1..j]
这里需要注意的是由于大部分编程语言的数组都是从0开始算起,这个与伪代码认为的数组的数是第1个有所不同,一般要注意有几个关键值要比伪代码的小1.
首先给你分析一下这个结构。
第一行是最外面的语句。
第二行是包含在第一行语句中的代码。
第三行、第四行、第五行、第八行是同一“级别”的代码,看他们前面是对齐的。明白吗?
第六行、第七行属于第五行。
第七行属于第六行。
慢慢看。。。
下面解释一下这个语句:
第一行等同于C语言中的:for(j=2;j<length[A];j++)
第二行是中的key<-A[j] 代表,将A[j]的值赋给key(do代表一组语句的开始)
第三行应该是一个描述。描述说:将A[j]的值插入已经排好序的数组A[1...J-1]中
第四行,赋值i=j-1
第五行是while循环:while(i>0 && A[j]>key)则执行下边的循环
第六行,赋值:A[i+1]=A[i]
第七行,赋值:i=i-1
第八行,赋值:A[i+1]=key
转换成C#语言,代码如下:
C#对插入排序算法的实现:
public static void InsertionSort<T>(T[] Input) where T:IComparable<T>
{
T key;
int i;
for (int j = 1; j < Input.Length; j++)
{
key = Input[j];
i = j - 1;
for (; i >= 0 && Input[i].CompareTo(key)>0;i-- )
Input[i + 1] = Input[i];
Input[i+1]=key;
}
}
JAVA代码:
- public class InsertionSort {
- public static void insert(Integer[] input) {
- for(int i = 1; i < input.length; i ++) {
- int current = input[i];
- //把current插入到input[0...i-1]中
- int j = i - 1;
- while((j >= 0) && input[j] > current ) {
- input[j + 1] = input[j];
- j = j -1;
- }
- input[j + 1] = current;
- }
-
- for(int i = 0; i < input.length; i ++) {
- System.out.println(input[i] + ", ");
- }
- }
- public static void main(String[] args) {
- Integer[] input = new Integer[]{
- 3,5,7,1,6,9,4,2,8
- };
- insert(input);
- }
- }
C语言
void sort(int array[],int n) { int i,j; int temp; for(i=1;i<n;i++) { temp = array[i]; for(j=i ; j>0 && temp < array[j-1] ; j--) { array[j]=array[j-1]; } array[j]=temp; } }