惊叹计算机运行速度的提升---以n Queens 问题为例

1 介绍

实现了书《Data Structures and Program design in C++》(Robert L. Kruse and Alexander J. Ryba, 2000)中的188页的基于回溯策略的递归算法solve_from,该算法能够计算n Queens问题的解。选择不同的n作为棋盘大小,能够得出不同棋盘大小的Queens问题的解即执行时间。

该书出版时间为2000年,那么使用的计算机大概为1999年左右的。该书给出了执行的结果数据。我在我的电脑上採用相同的代码和算法,选择相同的n也执行得到了对应的数据。

通过二者数据的对照,能够看出计算机执行时间的提示 (我的电脑时2011年12份买的)。

2 主程序及我的电脑环境

2.1 主程序

因为书中的主程序没有给出统计所以解和执行时间的代码,于是我对应更改了主程序源码例如以下:

#include <iostream>
#include <time.h>
#include "queens.h"

int sol_num =0;
void solve_from(Queens &configuration);

int main(){
    int board_size;
    clock_t start_time, end_time;
    cout<<"what is the size of  the board?

" << flush;
    cin >> board_size;
    if(board_size < 0 || board_size > max_board)
        cout <<"The number must be between 0 and " << max_board<<endl;
    else {
        Queens configuration(board_size);
        start_time = clock();
        solve_from(configuration);
        end_time = clock();
    }
    cout << "The statistics for " << board_size << " Queens problem:"<<endl;
    cout << "The number of solutions: " << sol_num << endl;
    cout << "The time used:" << static_cast<double>(end_time-start_time)/CLOCKS_PER_SEC << "s"<<endl;
}

/*
 * To recursively sole the n-Queens problem, to change the first line
 * can give the statistics of the n-Queens problem. That is, then number
 * of solutions for a specific n-Queens problems.
 */
void solve_from(Queens &configuration){
    //if(configuration.is_solved()) configuration.print();
    if(configuration.is_solved()) sol_num++;
    else{
        for(int col=0; col < configuration.board_size; col++)
            if(configuration.unguarded(col)){
                configuration.insert(col);
                solve_from(configuration);// Recursively continue to add queens
                configuration.remove(col);
            }
    }
}

2.2 我的电脑环境

电脑购买与2011年12份,内存2 GB,CUP 为AMD Phenom (tm) II N930 Quad-Core Processor 2 GB,操作系统为Windows 7 Professional。在其上安装Cygwin软件,当中的gcc 4.9.3版本号。

3 执行结果对照

书中的详细计算机的配置和型号不知。我们将其代表为1999年的计算机。而我的计算机则为2011年,尽管我在2015年执行的该程序。

二者产生的数据基于相同的源码。

表1 1999年计算机执行结果

Size Num_sol Time(seconds)
8 92 0.05
9 352 0.21
10 724 1.17
11 2680 6.62
12 14200 39.11
13 73712 243.05

表2 2011年计算机执行结果

Size Num_sol Time(seconds)
8 92 0.016
9 352 0.015
10 724 0.062
11 2680 0.218
12 14200 1.17
13 73712 7.145

上面的数据最好画成图的形式,观看更为方便:

【备注】:画上图採用的R代码例如以下:

 >library(ggplot2)
 >yearn <-  c(‘y1999‘,‘y1999‘,‘y1999‘,‘y1999‘,‘y1999‘,‘y1999‘,‘y2011‘,‘y2011‘,‘y2011‘,‘y2011‘,‘y2011‘,‘y2011‘)
 > size <-c(8,9,10,11,12,13,8,9,10,11,12,13)
 > time <-c(0.05,0.21,1.17,6.62,39.11,243.05,0.016,0.015,0.062,0.218,1.17,7.145)
 > queenData <- data.frame(year,size,time)
 > ggplot(queenData,aes(x=size,y=time,shape=yearn))+geom_line(position=position_dodge(0.2))+geom_point(position=position_dodge(0.2),size=4)

从上图能够看出,当size为8,9,10时二者的执行时间区别不大,但当size为更大的数值时,2011y的执行时间明显少的多,说明当前计算机硬件的发展促进了计算机速度的明显提升。这是一个令人兴奋的结果。

时间: 2024-10-13 05:32:45

惊叹计算机运行速度的提升---以n Queens 问题为例的相关文章

关于计算机运行速度的和eclipse的运行速度的优化

工欲善其事,必先利其器. 其实用于开发的话,电脑不需要太好的.要是开发还觉得慢,先自己优化一边先. 先来看看如何给eclipse加速吧!我觉得看下面这篇文库里的文章会比较好,既简单又有效. http://wenku.baidu.com/link?url=ZOBxUK4rgH3N5n-Iegsf7MzPvOzAS6UcguhJMa60j85tutTuDsAhwg5ffDZVhajcqH28MCH-MavksuT56b29JNhZ33MRBoRzoKxygwZbM1C 至于计算机的运行速度,只要cp

计算机是如何启动的?

从打开电源到开始操作,计算机的启动是一个非常复杂的过程. 我一直搞不清楚,这个过程到底是怎么回事,只看见屏幕快速滚动各种提示...... 这几天,我查了一些资料,试图搞懂它.下面就是我整理的笔记. 零.boot的含义 先问一个问题,"启动"用英语怎么说? 回答是boot.可是,boot原来的意思是靴子,"启动"与靴子有什么关系呢? 原来,这里的boot是bootstrap(鞋带)的缩写,它来自一句谚语: "pull oneself up by one's

程序猿进化必读:让App的运行速度与响应速度趋于一流(iOS)

有关App运行速度与响应速度优化的好文,按个人理解意译,受限于水平而不够严谨,附原文地址 PS,觉得鄙人干翻译好过干编码的兄弟们顶一下哦! 第一部分是说理念,太啰嗦,可以直接跳第二部分. 第二部分是一些实用的优化技术总结(高潮部分). iPad的出现对行业软件质量提升有着巨大的冲击.苹果公司多次提升了其准入标准,最明显的是要求软件运行更快更平滑.iPad能被迅速开启和唤醒,iPad应用能被迅速打开,点按Home键应用能迅速切到后台.桌面用户往往更具耐心,但是iPad用户期望任何操作能瞬间完成.讽

老男孩IT教育在线3期新学员司毅的计算机的基础知识

1:CUP在各个组件中相当于人的头主要负责运算数据和控制其他部件 2:内存在各个组件中是临时存放数据的地方当电脑关机或重启后数据就会丢失但是它的运算速度非常快,因为CUP先调用它的数据.(他的容量和处理速度直接决定了电脑的数据传输的快慢) 3:硬盘在计算机中是永久存放数据的地方.如:电影/文件文档/图片等信息的地方/在计算机工作时,CPU,输入输出设备与存储器之间存在大量的数据交换,因此存储器的存取速度和容量也是影响计算机运行速度的主要因素之一(在服务器优化场景里来说,硬盘的性能是决定网站的性能

零基础认识计算机组成部分

1.笔记本电脑(IBM,Apple):台式机,dell服务器(1u=4.45cm(R420,R410,R620,R630),2u(R720,R730,R710),3u(C5520,R940),4u(R930),5u(T630,T130,T430,T440)),惠普(1u(DL360,DL120,DL60,DL20),2u(DL388),4u(DL580),5u(ML350,ML350p,ML150)),IBM(1u(xSeries 305,xSeries335),2u(S812L,xSeries

计算机的概念

计算机是根据指令操作数据的设备,具备功能性和可编程性两个基本特性. 定义:计算机是根据指令操作数据的设备(A computer is a machine that manipulates data according to a list of instructions). 计算机有两个特性:功能性和可编程性. 功能性指对数据的操作,变现为数据计算.表现为数据计算.输入输出处理和结果存储等. 可编程性指它可以根据一系列指令自动地.可预测地.准确地完成操作者的意图. 理解计算机应该结合计算机的两个特

计算机基础-内存

内存--临时存储数据的设备(CPU与硬盘间的桥梁) 1.构成: PCB板.内存条固定卡缺口(左右半圆形缺口).内存芯片 电容.电阻.标签.SPD 金属触电(金手指--连接主板) 2.主要厂家: 金士顿 威刚 海盗船 3.选购参数 (1)内存类型 DDR(单面金手指92个) DDR2(单面金手指120个) DDR3(金手指个数与DDR2相同 最新版) 理论上:DDR3是DDR2存储速度的两倍 (2)内存容量(信息交换空间) 内容越大 计算机运行速度越快 运算速度:2×2G>1×4G(双线程) (3

计算机之程序设计

一.计算机之程序设计 1.1计算机的概念 计算机是根据指令操作数据的设备 1.功能性 对数据的操作,表现为数据计算.输入输出处理和结果储存等 2.可编程性 根据一系列指令自动的.可预测的.准确的完成操作者的意图 1.2 计算机的发展 计算机的发展是参照摩尔定律,表现为指数方式 --计算机硬件所依赖的集成电路规模参照摩尔定律发展 --计算机运行速度因此也接近集合几何级数快速增长 --计算机高效支撑的各类运算功能不断丰富发展 --当今世界,唯一长达50年有效按照指数发展的技术领域 --计算机深刻改变

机器学习算法-梯度树提升GTB(GBRT)

Introduction 决策树这种算法有着很多良好的特性,比如说训练时间复杂度较低,预测的过程比较快速,模型容易展示(容易将得到的决策树做成图片展示出来)等.但是同时,单决策树又有一些不好的地方,比如说容易over-fitting,虽然有一些方法,如剪枝可以减少这种情况,但是还是不太理想. 模型组合(比如说有Boosting,Bagging等)与决策树相关的算法比较多,如randomForest.Adaboost.GBRT等,这些算法最终的结果是生成N(可能会有几百棵以上)棵树,这样可以大大的