小编Gen*_*r01的帖子

分析一个涉及按位运算和两个幂的算法?

我写了一个程序,计算给定输入数字中最大的2的幂.例如,26中最大的2的幂是16,因为2 4是16.这是算法:

uint power2( uint n )
{
   uint i = n;
   uint j = i & (i - 1);
   while( j != 0 )
   {
      i = j;
      j = i & (i - 1);
   }
   return i;
}
Run Code Online (Sandbox Code Playgroud)

我对算法的分析有点挣扎.我知道我们正试图找出Big-Oh,Big-Omega或Big-Theta符号.为了分析算法,我们应该计算基本操作的数量?我的问题是我看到两行可能是基本操作.我看到uint j = i & (i - 1)while循环外面的行,我也看到j = i & (i - 1)while循环内部.我觉得while循环中的那个是肯定的基本操作,但是while循环之外的那个呢?

我努力解决的另一个问题是确定while循环体的执行次数.例如,如果我们有一个for循环,for(int i = 0; i < n; i++) {...}我们知道这个循环将执行n时间.或者甚至在while循环中while(i < n * n) {... …

c++ algorithm big-o bit-manipulation time-complexity

3
推荐指数
1
解决办法
143
查看次数

计算八个难题中的曼哈顿距离

我正在研究一个程序,使用带有启发式的知情搜索来解决Python中的Eight Puzzle.我们应该使用的启发式是曼哈顿距离.所以对于像这样的董事会:

 State            Goal        Different Goal
7  2  4         1  2  3           1  2  3
5     6         8     4           4  5  6
8  3  1         7  6  5           7  8
Run Code Online (Sandbox Code Playgroud)

曼哈顿距离将是 4 + 0 + 3 + 3 + 1 + 0 + 2 + 1 = 14

在视觉上,很容易计算出一定数量的空格数,但在Python中我将一个板表示为一个列表,因此上面的板将是[7, 2, 4, 5, 0, 6, 8, 3, 1]目标状态[1, 2, 3, 4, 5, 6, 7, 8, 9, 0].我一直在努力尝试使用mod工作,但似乎无法让它正常工作.我的老师说使用mod会有助于弄清楚如何做到这一点.我看到的一些例子使用了2d数组,abs(x_val - x_goal) + abs(y_val - y_goal)这是有意义的,但由于我使用的是列表,我不知道如何实现它.我到目前为止的代码是:

distance = …
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
5631
查看次数

在单独的行上打印数组的每个值 Javascript

我有一个涉及 Javascript 的程序,允许与网页进行交互。这是一个棒球网站,所以我正在做的是提示用户输入月份。用户可以输入一个数字,如 6 代表六月,或月份本身的名称,程序将显示他们在该月玩的所有游戏。

我这样做的方法是创建一个数组并将其与游戏信息一起存储。所以七月看起来像这样:

if(month == 7)    // July
{
    var gamesPlayed = ["7/1/16: Team1 @ Team2", "7/3/16: Team2 @ Team 4",
                       "7/4/16: Team3 @ Team2" , ... ,etc, ...];
}
Run Code Online (Sandbox Code Playgroud)

在我的主函数(当我按下提交按钮时执行的那个)中,我想打印数组。

var schedule = getSchedule(July);

for(var i = 0; i < schedule.length; i++)
{
    document.getElementById("result").innerHTML = schedule[i] + "<br />";
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这不起作用。它所做的只是打印数组中的最后一个值,而不是整个内容。为什么不打印整个数组?我试图做document.write(schedule[i] + "<br />");,但没有做我想要的。它打印了它,但它自己打印在一页上,我无法在新的一个月中计时或返回主页等。有没有办法让它打印所有元素,而不仅仅是最后一个一?

javascript arrays

1
推荐指数
2
解决办法
8139
查看次数