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

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

1-前言

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

2-线性代数-题目




3-线性代数-参考答案




4-数据结构-题目

【問題1】二分探索木と探索順(模拟

整数値を格納する二分探索木を考える。

各節点は 1 つの整数値を保持し,左部分木にはその値より小さい要素,右部分木には大きい要素のみが格納されるものとする。

同じ値は挿入されない。

(1)

数列

S={18, 7, 26, 3, 11, 20, 30, 10}

を先頭から順に挿入したときに得られる二分探索木を図示せよ。

(2)

(1) の木に対して,「左部分木 → 節点 → 右部分木」の順で探索を行ったとき,出力される値を順に示せ。

(3)

挿入される数列が昇順で与えられる場合の,挿入処理全体の最悪時間計算量を,要素数 (n) を用いてオーダー表記で答えよ。


【問題2】グラフ表現と計算量(模拟

連結な有向グラフ (G=(V,E)) を考える。

頂点数を (n),辺数を (m) とする。

(1)

グラフを隣接行列で表現した場合,

ある 1 つの頂点から出るすべての辺を列挙するために要する時間計算量を答えよ。

(2)

同じグラフを隣接リストで表現した場合の空間計算量を,

(n,m) を用いてオーダー表記で答えよ。

(3)

幅優先探索(BFS)と深さ優先探索(DFS)に共通して,

必ず成り立つ性質を 1 つ挙げ,簡潔に説明せよ。


【問題3】Union-Find(素集合データ構造)(预测

要素数 (n) の集合に対して,Union-Find(素集合データ構造)を用いる。

(1)

Union 操作および Find 操作の概要をそれぞれ簡潔に説明せよ。

(2)

経路圧縮を用いた場合の Find 操作が高速化される理由を述べよ。

(3)

Union-by-rank(または Union-by-size)を用いる目的を説明せよ。

(4)

経路圧縮と Union-by-rank を併用した場合の,

一連の操作に対する償却計算量について述べよ。


【問題4】動的配列と償却計算量(预测

要素を末尾に追加できる動的配列を考える。

配列が満杯になった場合には,サイズを 2 倍に拡張し,全要素をコピーするものとする。

(1)

要素を 1 つ追加する操作の最悪時間計算量を答えよ。

(2)

同じ操作の償却時間計算量を答えよ。

(3)

(2) のように評価できる理由を,

コピー回数と要素数の関係に着目して説明せよ。


5-数据结构-参考答案

【問題1】二分探索木と探索順【解答】


(1)

数列

S={18, 7, 26, 3, 11, 20, 30, 10}

を先頭から順に挿入すると,得られる二分探索木は次のとおりである。

复制代码
          18
        /    \
       7      26
      / \    /  \
     3  11  20  30
        /
       10

(2)

「左部分木 → 節点 → 右部分木」の順は中順探索である。

したがって,出力される値の順序は次のとおりである。

3,\\ 7,\\ 10,\\ 11,\\ 18,\\ 20,\\ 26,\\ 30


(3)

挿入される数列が昇順に与えられる場合,

二分探索木は片側にのみ伸び,高さが (n) となる。

このとき挿入処理を (n) 回行うため,

最悪時間計算量は

O(n\^2)

である。


【問題2】グラフ表現と計算量【解答】


(1)

隣接行列では,ある 1 つの頂点から出るすべての辺を列挙するために,

対応する行の全要素を調べる必要がある。

したがって時間計算量は

O(n)

である。


(2)

隣接リストでは,頂点数分のリストと辺数分の要素を保持する。

よって空間計算量は

O(n+m)

である。


(3)

幅優先探索および深さ優先探索では,

各頂点は高々 1 回だけ訪問され,

最終的にすべての到達可能な頂点が探索される。


【問題3】Union-Find(素集合データ構造)【解答】


(1)

Union 操作は,2 つの集合を 1 つの集合に統合する操作である。

Find 操作は,要素が属する集合の代表元を求める操作である。


(2)

経路圧縮により,Find 操作の際に通過した節点を直接代表元に接続することで,

木の高さが低くなり,後続の Find 操作が高速化される。


(3)

Union-by-rank(または Union-by-size)は,

高さ(または要素数)の小さい木を大きい木の下に接続することで,

木が過度に深くなるのを防ぐことを目的とする。


(4)

経路圧縮と Union-by-rank を併用した場合,

一連の Union および Find 操作の償却計算量は

ほぼ定数時間であり,

厳密には逆アッカーマン関数 (\alpha(n)) に比例する。


【問題4】動的配列と償却計算量【解答】


(1)

配列が満杯の状態で要素を追加する場合,

全要素のコピーが必要となるため,

最悪時間計算量は

O(n)

である。


(2)

同じ操作の償却時間計算量は

O(1)

である。


(3)

配列の拡張は容量が倍増するタイミングでのみ発生し,

各要素がコピーされる回数は全体で高々定数回に抑えられる。

そのため,操作回数全体で平均すると,

1 回あたりの計算量は定数時間として評価できる。


6-总结

训练成长。!!

相关推荐
wabs66642 分钟前
关于二叉树【力扣572.另一棵树的子树的思考】
数据结构·c++·算法·leetcode·二叉树
雨落在了我的手上2 小时前
Java数据结构(十四):Map和Set
数据结构
码行山野赴时序归途2 小时前
链表家族收官篇:循环链表
c语言·开发语言·数据结构·链表
船厂电气自动化ai大模型5 小时前
AI大模型与数学|第81天 课程:正交向量、正交基、格拉姆‑施密特(Gram‑Schmidt)正交化
开发语言·数据结构·人工智能·线性代数·机器学习
库玛西5 小时前
数据结构与算法之美:树、森林与二叉树全解析
c语言·数据结构·笔记·考研·算法·学习方法
careathers5 小时前
【数据结构】队列
java·数据结构
Rabitebla6 小时前
【Linux系统编程】指令(三):创建、删除、复制、移动、看内容
linux·数据结构·c++·算法
我不会起名字3227 小时前
一天一道力扣Hot100(36):深度优先算法---组合总和
数据结构·c++·后端·python·算法·go
雨落在了我的手上8 小时前
Java数据结构(十五):哈希表
数据结构
有点。17 小时前
C++03阶段练习(练习题)
数据结构·算法·图论