我觉得我解释不清楚

来源: 说了就走 2009-07-30 11:56:00 [] [博客] [旧帖] [给我悄悄话] 本文已被阅读: 次 (1593 bytes)
回答: 似乎没有那么复杂说了就走2009-07-29 21:45:44
下面是源程序(编译通过)。有3个变量;我认为是O(n)的

------------------------------------
using System;
using System.Collections.Generic;
using System.Text;

namespace netiq
{
class Program
{
const int n = 10;

static int f(int k)
{
return (k % 2 > 0) ? ((k - 1) / 2 + n) : k / 2;
}
static int g(int k)
{
return (k < n) ? (k * 2) : ((k - n) * 2 + 1);
}
static string toString(int[] a)
{
string str = a[0].ToString();
for (int i = 1; i < a.Length; i++)
{
str += " " + a[i];
}
return str;
}

static void Main(string[] args)
{
string str;
int[] a = new int[n * 2];
for (int i = 0; i < n * 2; i++) { a[i] = g(i); }

for (int k = 0; k < n * 2; k++) { a[k] = k; } // init
Console.WriteLine(toString(a));

// run algorithm
for (int k = 0; k < n * 2; k++)
{
if (g(k) == a[k]) { continue; }
int i = k, j;
while (f(i) != k)
{
j = a[f(i)];
a[f(i)] = i;
i = j;
}
a[k] = i;
}

Console.WriteLine(toString(a));
return;
}
}
}

所有跟帖: 

主要是难以判断一个位置有没有排好。 -乱弹- 给 乱弹 发送悄悄话 乱弹 的博客首页 (355 bytes) () 07/30/2009 postreply 17:30:25

你可以run一下这个程序,对任何n都适用 -说了就走- 给 说了就走 发送悄悄话 说了就走 的博客首页 (357 bytes) () 07/30/2009 postreply 20:47:50

你一直在假设a[k]=k。没有这个假设你的算法不成立 -康MM- 给 康MM 发送悄悄话 康MM 的博客首页 (0 bytes) () 07/31/2009 postreply 07:14:51

那么请问你的假设是什么? -说了就走- 给 说了就走 发送悄悄话 说了就走 的博客首页 (216 bytes) () 07/31/2009 postreply 18:16:46

还是问冬瓜太郎吧,他说可以就可以 -康MM- 给 康MM 发送悄悄话 康MM 的博客首页 (177 bytes) () 08/02/2009 postreply 10:25:52

你说得很有道理 -说了就走- 给 说了就走 发送悄悄话 说了就走 的博客首页 (2675 bytes) () 08/02/2009 postreply 13:50:02

我还是觉得我们在说两件不同的事 -康MM- 给 康MM 发送悄悄话 康MM 的博客首页 (0 bytes) () 08/06/2009 postreply 17:49:24

请您先登陆,再发跟帖!

发现Adblock插件

如要继续浏览
请支持本站 请务必在本站关闭Adblock

关闭Adblock后 请点击

请参考如何关闭Adblock

安装Adblock plus用户请点击浏览器图标
选择“Disable on www.wenxuecity.com”

安装Adblock用户请点击图标
选择“don't run on pages on this domain”