如何从这个Java程序中获得解决算法的解决方案?

时间:2017-09-11 23:49:18

标签: java arrays algorithm data-structures

for(int=0; i<1,000,000; i++)
{
     if(data[i]< 0)
        data[i]= data[i] * 2; 
}

大家好,

我想知道如果执行内存访问所需的时间是100纳秒,并且所有其他操作(算术,寄存器访问等)需要10纳秒,是否可以计算下面此算法的绝对速度?我很确定这个问题可以用来计算绝对速度。我知道我们确实有一个变量已经是Ta = 100纳秒,对吗?其余的缺失变量可以通过我在Java程序中编译后提供的代码行找到?我编译并运行它,但它并没有告诉我解决这个问题需要什么。有什么建议吗?

以下是我用来计算此算法绝对速度的公式:

T=Tna X Nna + Ta X Na; 

Tna= the time to execute a memory nonaccess instruction; 
Nna= the number of memory nonaccess machine language instructions executed; 
Ta= the time to execute a memory access instruction;
Na= the number of memory access machine language instructions executed;

这是我将编译并运行的代码,以查看它是否会提供解决此问题所需的一些缺失变量。

1 个答案:

答案 0 :(得分:0)

@dorakta如果您关注代码块中的操作分类。以下可能是一个起点。

第1行: for(int = 0; i&lt; 1,000,000; i ++)

我在for循环中变量,需要内存访问和休息操作。 这次执行1,000,000次

你有:

1000000 times of 
2 - memory access (1 read and 1 assign)
1 - compare
1 - incr (depends. It could be -> 1 read and 1 add)

第3行: if(data [i]&lt; 0)

if语句中的

data [i]是内存引用和比较操作。 这次执行1,000,000次

你有:

1000000 times of 
2 - memory access
1 - compare

第4行: data [i] = data [i] * 2

您有:0到1000000次,具体取决于数据的值。 您可能想要计算最坏的情况。

Hence, 1000000 times.
2 - memory access (1 read and 1 assign)
1 multiply

希望它有所帮助!