【问题标题】:How many matrices have trace equal to givan trace?有多少矩阵的迹等于 givan 迹?
【发布时间】:2014-04-12 20:05:43
【问题描述】:

我已经给出了矩阵的迹线'n'。我想知道有多少矩阵(仅 2*2 阶)其迹线等于'n',并且所有矩阵必须是 可逆,即它们的行列式必须大于'0'

For ex:
trace=3
No.of matrices=2

trace=4
No.of matrices=11

trace=5
No.of matrices=30

我为此编写了一个代码,但效率不高,因为我的代码成功地为n=1500 提供了输出,之后我超出了时间限制。 谁能帮我?

我的代码是:

#include<stdio.h>

int main()
{
    int t,n,nsot,i,j,l;
    int arr[2000],k;
    unsigned long long  sum1=0,sum2=0,sum=0;
    scanf("%d",&t);
    while(t--)
    {
        sum1=0;
        sum2=0;
        //sum=0;
        scanf("%d",&n);
        nsot=n/2;
        for(i=1;i<=nsot;i++)
        {
            arr[i]=i*(n-i);
            //printf("%d ",arr[i]);
            sum1=0;
                for(k=1;k<arr[i];k++)
                {
                    //printf("%f\n",ceil(arr[i]/k));
                    sum1=sum1+((arr[i] - 1) / k);

                }
                if(i==(n-i))
            sum=sum1;
            else
            sum=0;

            //printf("%d\n",sum);
            //printf("%llu",sum2);
            sum2=sum1+sum2;
        }
        printf("%llu\n",(2*sum2)-sum);
    }
}

【问题讨论】:

  • 可逆意味着行列式!= 0。它们必须是可逆的,还是行列式必须是严格正的?
  • 一定要使用long long吗?只需long,它可能会运行得更快。
  • 对于方阵“A”的可逆性条件是|A|!=0,对于正可逆性|A|>0。
  • 数据类型没有问题!!
  • @madhurgarg 这不是我的问题。停止对人无礼,开始正确回答他们的问题。

标签: c algorithm matrix


【解决方案1】:

所以我猜你想要正矩阵元素和行列式 > 0。

跟踪的可能值是[1, n - 1]; [2, n - 2] ...,因此是n -1 值。

我们将检查,对于这些 (O(n) checks) 中的每一个,我们可以通过多少种方式填充矩阵的其余元素以使行列式保持为正。

设矩阵为:

a1 a3
a4 a2

那么行列式就是a1*a2 - a3*a4。对于固定的a1a2,将a31 迭代到n - 1。然后你必须解决:

a1*a2 - x*a4 > 0
a1*a2 > x*a4
x < a1*a2 / a4

所以你可以在O(1) 中找到x => 总复杂度O(n^2),应该很快。

这似乎是你正在做的,除了你最里面的循环使它成为O(n^3)(你也迭代x):

l=1;
while(k*l<arr[i])
{
    sum1++; 
    l++;
}

k = 10 和arr[i] = 103l 最后会是什么?你能找到10103l的最终值之间的关系吗?那将是你的公式。

【讨论】:

  • 你说:x
  • @madhurgarg - 不,你没有。阅读我的其余答案。
  • 我已经重写了我的代码。它比以前快了一些,但仍然超出了“ideone”检查的时间限制。
【解决方案2】:

您的问题是众所周知的整数分区问题的特殊化。 p(n) 是将 n 写为正整数之和的方式数(顺序无关紧要),而 p(n,k) 是将 n 写为 k 整数之和的方式数。您的问题从 p(n,2) 开始,并添加了一些额外的条件。有大量关于整数分区算法的文献,你应该从其中之一开始。 但是,请注意整数分区是 NP 完全的,因此它很自然会随着 n 的增长而快速发散。

【讨论】:

  • 虽然严格来说你是对的,但这几乎没有帮助,因为p(n,2) 很容易找到,而且问题集中在完全不同的东西上。
猜你喜欢
  • 1970-01-01
  • 2015-12-21
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2019-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多