【大学院-筆記試験練習:线性代数和数据结构(2)】

大学院-筆記試験練習:线性代数和数据结构(2)

1-前言

为了升到自己目标的大学院,所作的努力和学习,这里是线性代数和数据结构部分。

2-线性代数-题目

【問1】一次独立・一次従属の判定

解答

3 つのベクトル
( 0 1 4 ) , ( 2 − 1 0 ) , ( 1 0 2 ) \begin{pmatrix} 0\ 1\ 4 \end{pmatrix}, \quad \begin{pmatrix} 2\ -1\ 0 \end{pmatrix}, \quad \begin{pmatrix} 1\ 0\ 2 \end{pmatrix} (0 1 4),(2 −1 0),(1 0 2)

が一次独立か一次従属かを判定する。

これらを列ベクトルとする行列を考える。
A = ( 0 2 1 1 − 1 0 4 0 2 ) A= \begin{pmatrix} 0 & 2 & 1\ 1 & -1 & 0\ 4 & 0 & 2 \end{pmatrix} A=(021 1−10 402)

行列式を計算すると,
det ⁡ A = 0 ⋅ ∣ − 1 0 0 2 ∣ − 2 ⋅ ∣ 1 0 4 2 ∣ + 1 ⋅ ∣ 1 − 1 4 0 ∣ \det A =0\cdot \begin{vmatrix} -1 & 0\ 0 & 2 \end{vmatrix} -2\cdot \begin{vmatrix} 1 & 0\ 4 & 2 \end{vmatrix} +1\cdot \begin{vmatrix} 1 & -1\ 4 & 0 \end{vmatrix} detA=0⋅ −10 02 −2⋅ 10 42 +1⋅ 1−1 40

= − 2 ( 2 ) + 4 = 0 =-2(2)+4=0 =−2(2)+4=0

よって,これらのベクトルは 一次従属である

1 2 ( 0 1 4 ) + 1 2 ( 2 − 1 0 ) = ( 1 0 2 ) \frac{1}{2}\begin{pmatrix}0\\1\\4\end{pmatrix} +\frac{1}{2}\begin{pmatrix}2\\-1\\0\end{pmatrix} =\begin{pmatrix}1\\0\\2\end{pmatrix} 21 014 +21 2−10 = 102


【問2】点と平面

(1) 平面に垂直な直線


A ( 7 , 1 , − 3 ) A(7,1,-3) A(7,1,−3)

および平面
β : ; x + 2 y − 3 z + 10 = 0 \beta:;x+2y-3z+10=0 β:;x+2y−3z+10=0

が与えられている。

平面 β \beta β の法線ベクトルは
n ⃗ = ( 1 , 2 , − 3 ) \vec n=(1,2,-3) n =(1,2,−3)

である。

したがって,点 A A A を通り平面 β \beta β に垂直な直線は,
( x , y , z ) = ( 7 , 1 , − 3 ) + t ( 1 , 2 , − 3 ) (x,y,z)=(7,1,-3)+t(1,2,-3) (x,y,z)=(7,1,−3)+t(1,2,−3)

と表される。


(2) 交点と距離

直線と平面の交点を P P P とする。

直線の式を平面の方程式に代入すると,
( 7 + t ) + 2 ( 1 + 2 t ) − 3 ( − 3 − 3 t ) + 10 = 0 (7+t)+2(1+2t)-3(-3-3t)+10=0 (7+t)+2(1+2t)−3(−3−3t)+10=0

整理して,
28 + 14 t = 0 ⇒ t = − 2 28+14t=0 \Rightarrow t=-2 28+14t=0⇒t=−2

よって交点 P P P は
P = ( 5 , − 3 , 3 ) P=(5,-3,3) P=(5,−3,3)

である。

距離 A P AP AP は
A P = ∣ t ∣ ⋅ 1 2 + 2 2 + ( − 3 ) 2 = 2 14 AP=|t|\cdot\sqrt{1^2+2^2+(-3)^2} =2\sqrt{14} AP=∣t∣⋅12+22+(−3)2 =214

となる。


【問3】行列の固有値・固有ベクトルと C n C^n Cn

行列
C = ( 2 − 1 3 6 ) C= \begin{pmatrix} 2 & -1\ 3 & 6 \end{pmatrix} C=(2−1 36)

について考える。


(1) 固有値と固有ベクトル

固有方程式は

\\det(C-\\lambda I) \\begin{vmatrix} 2-\\lambda \& -1 3 \& 6-\\lambda \\end{vmatrix} =(2-\\lambda)(6-\\lambda)+3

= λ 2 − 8 λ + 15 =\lambda^2-8\lambda+15 =λ2−8λ+15

よって,
( λ − 5 ) ( λ − 3 ) = 0 (\lambda-5)(\lambda-3)=0 (λ−5)(λ−3)=0

より,
λ = 5 , ; 3 \lambda=5,;3 λ=5,;3

が固有値である。

  • λ = 5 \lambda=5 λ=5 のとき,
    ( C − 5 I ) x ⃗ = 0 ⇒ y = − 3 x (C-5I)\vec{x}=0 \Rightarrow y=-3x (C−5I)x =0⇒y=−3x

    より,固有ベクトルは
    ( 1 − 3 ) \begin{pmatrix} 1\ -3 \end{pmatrix} (1 −3)

  • λ = 3 \lambda=3 λ=3 のとき,
    ( C − 3 I ) x ⃗ = 0 ⇒ y = − x (C-3I)\vec{x}=0 \Rightarrow y=-x (C−3I)x =0⇒y=−x

    より,固有ベクトルは
    ( 1 − 1 ) \begin{pmatrix} 1\ -1 \end{pmatrix} (1 −1)


(2) C n C^n Cn の計算

行列 C C C は異なる 2 つの固有値をもつため,対角化可能である。

C = P D P − 1 C=PDP^{-1} C=PDP−1

とすると,
C n = P D n P − 1 C^n=PD^nP^{-1} Cn=PDnP−1

計算の結果,
C n = 1 2 ( 3 ⋅ 3 n − 5 n 3 n − 5 n − 3 ⋅ 3 n + 3 ⋅ 5 n − 3 n + 3 ⋅ 5 n ) C^n= \frac{1}{2} \begin{pmatrix} 3\cdot3^n-5^n & 3^n-5^n\ -3\cdot3^n+3\cdot5^n & -3^n+3\cdot5^n \end{pmatrix} Cn=21(3⋅3n−5n3n−5n −3⋅3n+3⋅5n−3n+3⋅5n)

となる。


🔎 大学院入試で評価されやすいポイント

  • 「よって」「したがって」「である」を明確に使う
  • 定義・方針 → 計算 → 結論 の順を守る

3-线性代数-参考答案

和题目在一起

4-数据结构-题目


問1.

図1は与えられた整数値を2分探索木に追加する

insert 関数と,2分探索木の各頂点を訪問し頂点に

格納された値を表示する visit 関数の疑似コードで

ある。create 関数は2分探索木の頂点を作成し,

print 関数は格納された値を表示する。さらに,頂

点 node に対し,node.key で格納された値を,

node.left で頂点に対する左の子を,node.right で

右の子を参照できるものとする。以下の問いに答え

よ。

(1)数列 S = {3, 7, 1, 5} を先頭から順に insert 関数

に与えたときに最終的に得られる 2 分探索木

を,図2の 2 分探索木の表記を参考に図示せよ。

(2)図2の 2 分探索木の根にあたる頂点を visit 関数

に与えたときに表示される値を順に示せ。

(3)insert 関数の時間計算量は,与えられる数列のデ

ータの並び順に依存する。任意のデータに対する

最善時間計算量と最悪時間計算量を,データ数 n

を用いてオーダー表記でそれぞれ答えよ。

(4)2 分探索木のすべての頂点の左右の部分木の高さの

差が 1 以内になるよう木の構造を変更するために

提案された操作に回転がある。図2の 2 分探索木

の根にあたる頂点を右に単回転して得られる 2 分

探索木を図示せよ。


図1:2分探索木に関する疑似コード

复制代码
1: function insert(Node node, int key):
2:     if node = null then
3:         return create(key)
4:     end
5:     else if key < node.key then
6:         node.left ← insert(node.left, key)
7:     end
8:     else if key > node.key then
9:         node.right ← insert(node.right, key)
10:    end
11: end

14: function visit(Node node):
15:     if node != null then
16:         print(node.key)
17:         visit(node.left)
18:         visit(node.right)
19:     end
20: end

図2:2分探索木の例

(图中为一棵二分探索树,节点标号为 5, 3, 6, 2, 4, 1)


問2.

n 個の整数値が格納された配列 A が与えられたとき,

ステップ1から3により昇順にソートするアルゴリズ

ムに関し,以下の問いに答えよ。なお,配列の要素数

を n とし,i 番目の添字の要素を A[i] で参照でき,

i = 0,1,...,n−1 とする。

Step 1:以下の Step 2 と 3 を i = 0 から n−1 まで繰り返す。

Step 2:A[i]〜A[n−1] の中から最小値の要素の添字 p を探索する。

Step 3:A[i] と A[p] を交換する。

(1)配列 A = {3, 4, 2, 1} をソートする過程をすべて図示せよ。

(2)本アルゴリズムの名称を答えよ。

(3)任意の配列に対する平均時間計算量と最悪時間計算量を,

要素数 n を用いてオーダー表記でそれぞれ答えよ。

(4)値が同じである要素が 2 つ以上存在するデータをソート

した場合にソート前後でそれらの要素順序が変わら

ないようなソートを安定なソート(stable sort)と呼ぶ。

本アルゴリズムは安定なソートと言える場合は「はい」,

そうでない場合は「いいえ」と答えよ。

(5)本アルゴリズムよりも最悪時間計算量が小さいソート

アルゴリズムの名称を 1 つ答えよ。


5-数据结构-参考答案

已给条件在干什么?

insert 函数

这是标准二分搜索树插入算法

规则只有一句话:

左子树 < 根 < 右子树

  • key 小 → 往左插
  • key 大 → 往右插
  • 空节点 → 新建节点

visit 函数

访问顺序是:

复制代码
print(自己)
visit(左)
visit(右)

👉 这是 先序遍历(Preorder Traversal)


(1)依次插入 S = {3, 7, 1, 5}

我们一步一步来(考试必须这样脑内模拟)

插入 3

复制代码
3

插入 7

7 > 3 → 右边

复制代码
 3
  \
   7

插入 1

1 < 3 → 左边

复制代码
   3
  / \
 1   7

插入 5

  • 5 > 3 → 右

  • 5 < 7 → 左

    复制代码
       3
      / \
     1   7
        /
       5

👉 这就是最终的二分搜索树


(2)对这棵树执行 visit(root) 输出顺序

visit先序遍历:根 → 左 → 右

按顺序:

  1. 访问 3
  2. 左子树 → 1
  3. 右子树 → 7
  4. 7 的左 → 5

✅ 输出结果:

复制代码
3, 1, 7, 5

(3)insert 的时间复杂度

重点一句话:

BST 的效率取决于"树高"

✅ 最好情况(完全平衡)

  • 树高 ≈ log n
  • 插入一次:O(log n)

👉 最优时间复杂度:

复制代码
O(log n)

❌ 最坏情况(完全退化成链表)

比如:1,2,3,4,5 这样插

  • 树高 = n
  • 插入要一路走到底

👉 最坏时间复杂度:

复制代码
O(n)

(4)对根节点做「右单旋转」

这一步是 AVL 树 / 平衡二叉树的核心思想

原树(图2):

复制代码
      5
     / \
    3   6
   / \
  2   4
 /
1

对根 5 做「右旋」

规则口诀(必背):

复制代码
      A            B
     / \          / \
    B   C  →     D   A
   / \              / \
  D   E            E   C

套用到本题:

  • A = 5
  • B = 3

旋转后结果:

复制代码
        3
       / \
      2   5
     /   / \
    1   4   6

👉 这就是答案


问2:排序算法

先看 Step 在干嘛(这是关键)

Step 2:

在 A[i] ~ A[n-1] 中找最小值

Step 3:

把它和 A[i] 交换

👉 这是标准的:选择排序(Selection Sort)


(1)A = {3, 4, 2, 1} 排序过程

i = 0

找最小:1

交换 A[0] 和 A[3]

复制代码
{1, 4, 2, 3}

i = 1

找 {4,2,3} 最小:2

交换 A[1] 和 A[2]

复制代码
{1, 2, 4, 3}

i = 2

找 {4,3} 最小:3

交换 A[2] 和 A[3]

复制代码
{1, 2, 3, 4}

i = 3

只剩一个 → 不变


(2)算法名称

✅ 正式答案:

复制代码
選択ソート(Selection Sort)

(3)平均 & 最坏时间复杂度

重点结论(必须背):

  • 无论什么输入
  • 比较次数都一样

👉 所以:

复制代码
平均时间复杂度:O(n²)
最坏时间复杂度:O(n²)

(4)是不是稳定排序?

稳定排序定义:

相同值的元素,排序前后相对顺序不变

选择排序的问题:

  • 会把后面的元素「直接交换到前面」
  • 会破坏相同元素的原始顺序

👉 不是稳定排序

✅ 答案:

复制代码
いいえ

(5)最坏时间复杂度更小的排序算法

你只要写一个即可,常见正确答案:

  • クイックソート(平均 O(n log n))
  • マージソート(最坏 O(n log n))✅ 推荐
  • ヒープソート(最坏 O(n log n))

✅ 最稳妥写法:

复制代码
マージソート

📌 给你一个「考试速记总结」

问1关键词

  • insert → BST

  • visit:print → left → right = 先序遍历

  • BST 时间复杂度:

    • 最好 O(log n)
    • 最坏 O(n)
  • 右旋:左孩子上位


问2关键词

  • Step2 找最小 + Step3 交换 → 选择排序
  • 时间复杂度:永远 O(n²)
  • 稳定性:❌ 不稳定
  • 更快算法:Merge Sort

6-总结

训练成长。!!

相关推荐
沉默-_-1 天前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
漫随流水1 天前
leetcode回溯算法(78.子集)
数据结构·算法·leetcode·回溯算法
全栈游侠1 天前
数据结构 - 链表
数据结构·链表
一生只为赢1 天前
通俗易懂:ARM指令的寻址方式(三)
运维·arm开发·数据结构·嵌入式实时数据库
踢足球09291 天前
寒假打卡:2026-01-24
数据结构·算法
tobias.b1 天前
408真题解析-2010-9-数据结构-折半查找的比较次数
java·数据结构·算法·计算机考研·408真题解析
im_AMBER1 天前
Leetcode 105 K 个一组翻转链表
数据结构·学习·算法·leetcode·链表
sin_hielo1 天前
leetcode 1877
数据结构·算法·leetcode
睡不醒的kun1 天前
定长滑动窗口-基础篇(2)
数据结构·c++·算法·leetcode·职场和发展·滑动窗口·定长滑动窗口
txzrxz1 天前
单调栈详解(含题目)
数据结构·c++·算法·前缀和·单调栈