Attempt to reference field of non-structure array.
1 回表示 (過去 30 日間)
古いコメントを表示
So I'm trying to write a code to count the inversions in an array. So in the array [6,4,3,5,1,2] there are 12 inversions. 6 is greater than 5 of the numbers to the right of it, 4 is greater than three of the numbers to the right of it, and so on. However, I need it so that the function doesn't count zero. So if there was a zero in the place of the 3, 6 would only be greater than 4 of the numbers to the right of it. (zero counts as a space, not as a number. I got some help, and this is the code I have to far
while (a <= array.length)
while (b <= array.length)
if array(a)>array(b);
count = count + 1;
else
count = count + 0;
end
b = b + 1;
end
a = a + 1;
end
When I try to run an example array through it and then try to display the count, it gives me the error "Attempt to reference field of non-structure array." Any help with what I'm doing wrong? Or how to add to the function so it doesn't count being greater as an inversion?
UPDATE: fixing the error of using left in place of right
3 件のコメント
Image Analyst
2015 年 2 月 23 日
What's your definition of inversion? And 6 doesn't have any numbers to the left of it. 4 has 1 number to the left of it, not 3. And this isn't .Net - there is no .length method to the variables. Use the length() function.
採用された回答
Andrew Newell
2015 年 2 月 24 日
Suppose we start with the example from your link:
array = [12 1 10 2 7 11 4 14 5 0 9 15 8 13 6 3];
To eliminate the zero entries, just do this:
array = array(array~=0);
A pretty good way of counting the inversions expresses them as a logical relation, e.g.,
array(2:end) > array(1)
ans =
0 0 0 0 0 0 1 0 0 1 0 1 0 0
Then you can just add up the 1's to get the number of inversions. You can do this in a loop:
count = 0;
for ii=1:length(array)-1
count = count + sum(array(ii+1:end)<array(ii));
end
There are more compact ways of doing this, but they're pretty cryptic.
0 件のコメント
その他の回答 (1 件)
Chris McComb
2015 年 2 月 23 日
I think that your problem is that array is not a structure. In order to get the length of a, use:
length(array)
instead of:
array.length
参考
カテゴリ
Help Center および File Exchange で Startup and Shutdown についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!