
编程珠玑
YellowStar5
风物长宜放眼量
展开
-
编程珠玑第四章
1.略 2.我们可以先用原来的二分搜索来寻找这个元素。如果他前一个与其值相等,那就使用前一个的下标;然后再考虑前一个的前一个,以此类推。**package chapter4;import java.util.Arrays;import java.util.Random;//二分搜素public class BinarySearch{ public static int binarySe原创 2016-08-27 21:25:48 · 659 阅读 · 0 评论 -
编程珠玑第11章--应用之排序
1.插入排序思想:假定x[0…0]是有序的,然后加入x[1],x[2],….,x[n];只要保证每次将待加入x[i]放入正确的位置即可。 方法一:从x[i]开始往前,两两比较,若是前者比后者大,则交换,否则终止 方法二:将x[i]暂存到temp里,两两比较,若是前者比后者大,则用前者覆盖后者,否则跳出循环,然后将temp赋给当前位置 插入排序总结,时间复杂度为O(n^2),如果数组本身就是接近原创 2016-09-18 21:16:07 · 619 阅读 · 0 评论 -
编程珠玑第一章第六题
假设用数组array来进行存储数值及其出现的次数 因为int有32个字节,而每个数至多出现10次,又2^3-1<10<2^4-1; 又32/4=8,所有说每个int可以存8个数值及其出现的次数;一.先说set的实现方法,目的是将数值进行存储且每做一次set个数加一(1).下面第一件事就是对每个数值进行分组,由上面可知 0~7用array[0]存储及记录次数;8~15用array[1]存储及记录原创 2016-08-13 19:50:46 · 650 阅读 · 2 评论 -
编程珠玑第一章第二题
题目描述:如何使用位逻辑(如与,或,移位)来实现位向量因为这里假设的是每一个数都不同,所以int的32位的每一位可以存储一个数值, 对应位为0则表示不存在该数,为1则表示存在。 假设用int数组array来记录数是否存在及其存在的个数 因为int的32位刚好每一位都可以存一个数及其个数(个数这里只能为0或1); 所以 一方面我们对数值number/32进行分组,即array[number原创 2016-08-11 22:18:56 · 657 阅读 · 0 评论 -
编程珠玑第三章习题3.7(5-8)
5.将输入的单词表示成带有后缀连字符的单词package chapter3;public class t5 { public static String matchSuffix(String word,String[] suffixs){ int matchIndex=-1;//存储最后单词word与哪一个后缀匹配,suffixs[matchIndex] b原创 2016-08-25 21:15:34 · 1851 阅读 · 0 评论 -
编程珠玑第三章3.7习题(1-4)
1.收税问题。 关注收税区间段的起始部分,结束部分,及此区间的税率;因为收税区间段都是每500$一个间隔且税率也随着收税区间的提高每次加上0.01;因而很容易得到下面的循环累加程序。package chapter3;public class t1 { public static float getTax(int income){ float taxRate=0.14f;原创 2016-08-24 22:23:59 · 696 阅读 · 0 评论 -
编程珠玑第二章习题2.6(1-4)
1.考虑查找给定输入单词的所有变位词问题。我们只需在问题C进行更改存储方式即可 程序如下,用一个 HashMap<String, ArrayList<String>>来保存结果即可,键为标识,值为同位词构成的listimport java.util.ArrayList;import java.util.Arrays;import java.util.HashMap;class WordInfo原创 2016-08-16 23:45:25 · 727 阅读 · 0 评论 -
编程珠玑第一章第一题的解法,常用的排序
编程珠玑第一章习题 第一题 如果不缺内存,如何使用一个库的语言实现一种排序算法以表示和排序集合 解法一 使用c++的sort#include <algorithm> #include <iostream> using namespace std; template <class T> int getArrLength( T& arr){//获取普通数组的长度原创 2016-08-11 20:58:20 · 560 阅读 · 0 评论 -
编程珠玑第二章问题A,B,C
问题A:给定一个最多包含40亿个随机排列的32位的顺序文件,找到一个不在文件的32位整数。在内存足够的情况下,如何解决该问题?如果有几个外部的临时文件可以用,但是仅有几百个字节可以用,又该如何解决问题 当内存够的情况下,C/C++可以用set集合来做,同样的Java可以用HashSet来做,具体就不说了 下面是不够的源码#include <iostream>using namespace st原创 2016-08-16 12:48:51 · 563 阅读 · 0 评论 -
编程珠玑第二章2.6(5-10)
**5.题目描述:向量旋转函数将向量ab变为ba(利用(a’b’)’=ba 这里’代表求逆)。如何 将向量abc变为cba(这对交换非相邻内存块的问题进行了建模)? 解决方法,利用(a’b’c’)’=cba [注:’还是代表求逆]。如果想到这里基本上就解决了。 只需对问题B的算法进行更改即可。**#include<iostream>#define Length 9using namesp原创 2016-08-23 20:58:55 · 689 阅读 · 0 评论 -
编程珠玑第八章-性能之算法设计技术
一.给定一个n元的向量(正负值),如何求最大的连续子向量? 首先贴一下书中伪代码的Java实现及我的理解package chapter8;import javax.xml.crypto.AlgorithmMethod;//给定n个具有浮点数的向量,求出连续子向量值的最大和 //划归为计算arr[i]到arr[j]的和问题public class t0 { //第一个算法就是先用两个循环原创 2016-08-30 23:42:18 · 829 阅读 · 0 评论 -
编程珠玑第10章--性能之节省空间
1.稀疏矩阵问题。 因为从文件更方便以为行为单位来读取,所以与书上的有少许不同 原理:这一行中结束的不为0元素刚好在下一行开始的不为0元素的前面,中间没有其他不为0元素。 这里按照行优先进行保存; 这里count保存迄今为止不为0的矩阵元素的个数 int firstInRow[]记录某一行第一个不为0的元素是第几个元素 int col[], 当前不为0的元素所在的列; int poin原创 2016-09-12 23:04:46 · 610 阅读 · 0 评论 -
编程珠玑第九章--性能之代码调优
大手术–二分搜索 几个程序的书写package chapter9;public class BinarySort { public static int binarySort0(int x[],int number){ int l=0,r=x.length-1; int m=0; while(true){ if(l>原创 2016-09-10 14:06:37 · 760 阅读 · 0 评论 -
编程珠玑第六章
1.假设现在的计算机比Appeal做实验所用的计算机快1000倍,如果使用相同的总时间(大约一天),对于O(n^2)和O(nlogn)算法,问题规模n个增加到多少? (1)使用O(nlogn)二叉树算法时,一天可以处理的问题n的规模10 000个。那么可知10000log10000/ ( x*logx)=1/1000;即4*Math.pow(10,7)*Math.log(10)=( x*logx)原创 2016-08-29 13:14:24 · 1597 阅读 · 0 评论 -
编程珠玑第十二章--应用之取样问题
原理(P142)1.正确理解所遇到的问题。(与用户讨论,自己的想法) 2.提炼抽象问题。(简洁,明确地陈述问题) 3.考虑尽可能多的解法(想法要灵活,Google搜索,书籍等) 4.实现一种解决方案 5.回顾。Review看是否可以优化问题定义:输入两个正整数参数m,n ,其中m<=n.输出是0~n-1中m个随机的有序列表,不允许重复。其中每个数出现的概率要相等。解法:解法一:利用概率,从剩原创 2016-09-19 17:32:20 · 679 阅读 · 0 评论