49

我在子数组、子序列和子集之间有点困惑

如果我有{1,2,3,4}

然后

子序列可以是{1,2,4}OR{2,4}等。所以基本上我可以省略一些元素但保持顺序。

子数组将是(例如大小为 3 的子数组)

{1,2,3}
{2,3,4} 

那么子集会是什么?

我对这3个有点困惑。

4

8 回答 8

42

在我看来,如果给定的模式是数组,所谓的subarray手段contiguous subsequence

例如,如果给定 {1, 2, 3, 4},subarray则可以

{1, 2, 3}
{2, 3, 4}
etc.

虽然给定的模式是一个序列,但subsequence包含其下标在原始序列中增加的元素。

例如,{1, 2, 3, 4}subsequence也可以是

{1, 3}
{1,4}
etc.

虽然给定的模式是一个集合,但subset包含原始集合的任何可能组合。

例如,{1, 2, 3, 4},subset可以是

{1}
{2}
{3}
{4}
{1, 2}
{1, 3}
{1, 4}
{2, 3}
etc.
于 2015-05-17T13:20:46.160 回答
38

考虑一个数组:

 {1,2,3,4}

子数组:数组中的连续序列,即

{1,2},{1,2,3}

子序列:不需要是连续的,但保持顺序,即

{1,2,4}

子集:与子序列相同,只是它有空集,即

 {1,3},{}

给定一个大小为 n 的数组/序列,可能

Subarray = n*(n+1)/2
Subseqeunce = (2^n) -1 (non-empty subsequences)
Subset = 2^n
于 2018-12-28T04:56:27.103 回答
11

考虑元素集合(数组、序列、集合等)中的这两个属性:顺序和连续性。

顺序是当您无法切换两个或多个元素的索引或位置时(具有单个元素的集合具有不相关的顺序)。

连续性是一个元素必须让它们的邻居与它们保持一致或为空。

子数组具有顺序和连续性。

子序列有顺序但没有连续性。

一个子集没有顺序也没有连续性。

不存在具有 Continuity 但没有 Order 的集合(据我所知)

于 2019-04-03T07:55:08.273 回答
9

在数组的上下文中,SubSequence - 不必是连续的,但需要保持顺序。但是 SubArray 是连续的并且本质上保持顺序。

如果您有 {1,2,3,4} --- {1,3,4} 是有效的子序列,但它不是子数组。

子集没有顺序,也没有连续的..所以你 {1,3,2} 是一个有效的子集,但不是子序列或子数组。

{1,2} 是一个有效的子数组、子集和子序列。

所有子数组都是子序列,所有子序列都是子集。

但有时子集、子数组和子序列可以互换使用,并加上单词 contigious 以使其更清晰。

于 2017-02-09T18:11:56.913 回答
3

子数组:数组中的一些连续元素

子集:集合中的一些元素

子序列:在大多数情况下,数组中的某些元素保持相对顺序(不一定是连续的)

于 2019-06-12T01:29:47.740 回答
2

以下是数组示例

Array : 1,2,3,4,5,6,7,8,9
Sub Array : 2,3,4,5,6 >> Contagious Elements in order
Sub Sequence : 2,4,7,8 >> Elements in order by skipping any or 0 elements
Subset : 9,5,2,1 >> Elements by skipping any or 0 elements but not in order
于 2021-12-22T17:53:06.687 回答
2

根据我的理解,例如,我们有一个列表说 [3,5,7,8,9]。这里

子集不需要维护顺序并且具有不连续的行为。例如,[9,3] 是一个子集

subsequence 维护顺序并具有非连续行为。例如,[5,8,9] 是一个子序列

子数组保持顺序并具有连续行为。例如,[8,9] 是一个子数组

于 2019-06-01T14:55:00.297 回答
1

一个简单明了的解释:

子数组:它总是应该是连续的形式。

例如,让我们采用一个数组 int arr=[10,20,30,40,50];

-->现在让我们看看它的各种组合:

  subarr=[10,20] //true
  subarr=[10,30] //false, because its not in contiguous form
  subarr=[40,50] //true

子序列:不需要是连续的形式,而是相同的顺序。

例如,让我们采用一个数组 int arr=[10,20,30,40,50];

-->现在让我们看看它的各种组合:

  subseq=[10,20]; //true
  subseq=[10,30]; //true
  subseq=[30,20]; //false, because order isn't maintained

子集:表示任何可能的组合。

例如,让我们采用一个数组 int arr=[10,20,30,40,50];

-->现在让我们看看它的各种组合:

  subset={10,20}; //true
  subset={10,30}; //true
  subset={30,20}; //true
于 2021-08-21T17:38:00.157 回答