C++经典算法问题:冯诺依曼邻居问题丨两种解法(内含源码示例)

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++经典算法问题:冯诺依曼邻居问题丨两种解法(内含源码示例)相关的知识,希望对你有一定的参考价值。

问题说明

某算法从一个1×1的方格开始,每次都会在上次图形的周围再加上一圈方格,在第n次的时候要生成多少个方格?下图给出了n = 0,1,2是的结果。

解法一:本程序使用通项公式求解

代码简述

若设第n次生成的方格数是a(n),则:

a(1) = a(0) + 4 * 1 a(2) = a(1) + 4 * 2 a(3) = a(2) + 4 * 3 ... a(n) = a(n-1) + 4 * n

化简可得:

a(n) - a(1) = 4 * (n + (n-1) + ... + 2 )

即:

a(n) = 2 * n*n + 2 * n + 1

则可得出a(n)的通项公式,即可用通项公式直接求解。

在程序中用Neumann2_3_12函数返回a(n)的值。

源码分享

#include<stdio.h>

//通项法

intNeumann2_3_12(intn) {

//通项公式的求解请查看说明文档

return2* n*n +2* n +1;

}

intmain() {

intn =0, a =0;

printf("------冯诺依曼邻居问题------\\n");

printf("已知:\\n");

printf("0 阶冯诺依曼邻居的元胞数为 1\\n");

printf("1 阶冯诺依曼邻居的元胞数为 5\\n");

printf("2 阶冯诺依曼邻居的元胞数为 13\\n");

printf("求:\\n");

printf("n 阶冯诺依曼邻居的元胞数\\n");

printf("----------------------------\\n");

printf("请输入n\\n");

scanf("%d", &n);

//用通项公式求解

a =Neumann2_3_12(n);

printf("------------通项法-------------\\n");

printf("%d 阶冯诺依曼邻居的元胞数为 %d\\n", n, a);

getchar();

getchar();

return0;

}

解法二:本程序使用递推关系求解 

代码简述

若设第n次生成的方格数是a(n),则:

a(1) = a(0) + 4 * 1 a(2) = a(1) + 4 * 2 a(3) = a(2) + 4 * 3 ... a(n) = a(n-1) + 4 * n

则可得:

a(n) = a(n - 1) + 4 * n

然后在代码中使用递归法,递归结束条件为n = 0,即

if (n == 0) return 1;

则可写出递归法的代码。

在程序中用Neumann2_4_12函数进行递归求解。

源码分享

#include<stdio.h>

//递归法

intNeumann2_4_12(intn) {

//由图可知第0次有1个方格

if(n ==0)return1;

//递推关系的求解请查看说明文档

returnNeumann2_4_12(n -1) +4* n;

}

intmain() {

intn =0, a =0;

printf("------冯诺依曼邻居问题------\\n");

printf("已知:\\n");

printf("0 阶冯诺依曼邻居的元胞数为 1\\n");

printf("1 阶冯诺依曼邻居的元胞数为 5\\n");

printf("2 阶冯诺依曼邻居的元胞数为 13\\n");

printf("求:\\n");

printf("n 阶冯诺依曼邻居的元胞数\\n");

printf("----------------------------\\n");

printf("请输入n\\n");

scanf("%d", &n);

//建立递推关系,使用递归求解

a =Neumann2_4_12(n);

printf("------------通项法-------------\\n");

printf("%d 阶冯诺依曼邻居的元胞数为 %d\\3n", n, a);

getchar();

getchar();

return0;

}

今天的分享就到这里了,大家要好好学C++哟~

写在最后:对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:904329806点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

编程学习视频分享:

 

以上是关于C++经典算法问题:冯诺依曼邻居问题丨两种解法(内含源码示例)的主要内容,如果未能解决你的问题,请参考以下文章

图灵机冯诺依曼结构哈佛结构

重新认识哈佛结构和冯诺依曼结构

冯诺依曼体系结构操作系统

冯.诺依曼所提出的存储程序式计算机共有哪五大组件,其核心组件是啥?

什么是内存:存储器层次结构

计算机系统读书笔记系统组成—冯诺依曼体系