`
yexin218
  • 浏览: 971084 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

回望尘土

阅读更多

呵呵,项目的第一个阶段今天终于可以结束了。奋斗了好几个月,终于可以让自己喘口气。


先不说太多,能比较顺利的结束,还要说说一个算法,我们在比对的结果中得到了很多数值,可是我们要在这些数值中找到与正确解相邻的数值,然后去平均来作为下一步算法的输入参数。所以这个平均值对后面的计算结果尤其重要。之前我们尝试过一些方法。比如全部先取平均,然后去除离平均值最大的数值,这样重复几次之后,留下的应该是比较理想的结果。可是事与愿违。在找同学商量之后,发现一下的算法还不错。比如:你要在这些数值中,找到三个最相近的数,那么先把这些数值排序,然后每隔一个做减法取绝对值,然后在这些绝对值中取其最小值,那么这个最小值对应的三个数就是最后的答案。

我测试了下:

package test;

public class FindCloseNumbers {
public static void main(String[] args){
	double nums[]= new double[10];
	//product numbers randomly
	for(int i=0;i<10;i++){
		nums[i] = Math.random()*32;
		System.out.println("):"+nums[i]);
	}
	//sort the array
	for(int j=0;j<nums.length;j++){
		for(int i=j+1;i<nums.length;i++){
			if(nums[j]>nums[i]){
				double temp = nums[i];
				nums[i]= nums[j];
				nums[j]=temp;
			}
		}
	}
	for(int i=0;i<10;i++){	
		System.out.println(")--(:"+nums[i]);
	}
	//check which three ones are close to each other
	int count = 0;
	double minerror = Math.abs(nums[0] -nums[3]);
	for(int k=1;k<nums.length-3;k++){
		double temperror = Math.abs(nums[k]-nums[k+3]);
		if(temperror < minerror){
			count = k;
		}
	}
	System.out.println("count(:"+count);
	//print four close numbers
	for(int p=count;p<count+3;p++){
		System.out.println("||:"+nums[p]);
	}
}
}

 结果还可以,用在项目上也比以前的效果好。虽然不能全部的问题,但是正确率提高了很多。在使用概率的算法之前,这个算是比较理想的了。多谢Day 。

 

突然觉得,我们之前写了那些程序,其实还有许多需要优化的,只不过老师要求从Java转到C++,才没有去认真的考虑。首先,项目是分工的,我们两个人一起写,命名方式都五花八门,更不用说一看变量名,就知道作具体用途啦。所以一旦在代码整合之后,发现很难调试。中间尝尽了不少苦头。所以在写C++之前,我们需要把需要的那些数据结构先定义好。避免后面又乱了。


还有就是,就是碰到不知道是程序代码问题,还是算法本身问题的时候。请不要想苍蝇那样到处乱撞。要学会用某种方法来辅助调试,打印中间运行结果,如果需要的话,可以人工计算与电脑计算相结合,比较中间可能出现的问题。有时候这一招很管用,至少可以让你知道是代码的错误还是算法本身的缺陷,因为如果比较复杂,事先可能考虑不周到,经验有限,所以只能使用这个比较笨的方法。

 

呵呵,又是周末,这学期课程增多,而且还是一些比较偏的课程,智能信息系统和计算机组成结构。够我折腾的。谁会SysemC的,可以帮忙指导下啊。还有很多琐碎的事情,哦,对了忘记了把TA作业带回来批改了,算了,也好,休息下先。

 

3
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics