このソート、今年の4月の試験に出て惨敗したアルゴリズムの課題です。
試験直前のお昼休みに見ていたにもかかわらず
できなかったという史上最悪な課題です。
ですからさすがに2度連続では出ないし
今度の試験対策にもなりませんが
暇に任せて考えてみることにします。
まず1つの根に2つの節があるようなヒープを作成します。
すると節を2で割った商が根になることが分かります。
(ここでの商は余りを抜いた数とします。以下も同様とします)
まだ実際のプログラムを見ていないので分かりませんが
ヒープを比較し始める根は
最大の並びの数を2で割った商からとなります。
そして根と右の節と比較し
(もしヒープの比較の最初で奇数の場合はこの後で出て来る根と左の節の比較からとなります)
節が大きい場合(等しい場合を含みません)は
根とその節を交換します。
さらにこの場合において節が並びの最大値より大きくなった場合は
その節との比較はスキップし、比較は終了します
また左右いずれの比較でも根が大きくなったら並びの最大値でなくとも比較は終了します。
上記2つ以外の場合は
交換した節を根とし、その根と2つの節を比較します。
(ここは再起呼び出しにより行います)
再起呼び出しを全て終了したら
今度は根と左の節で比較します。
そのやり方は根と右の節の場合と同様です。
上記終了後、根を1つ減らし根が1以上なら比較を続行します。
根が配列1の比較を終了したら
その配列1の値が最大値と確定します。
そしてその配列1の値を取りだし
配列2以上の配列の値を1つずつ減らしたヒープを作成します。
(実際には配列1を配列0にコピー、配列2を配列1にコピー…配列最大値を配列最大値-1にコピーとし最後に配列0を配列最大値にすれば配列は1つでよくなると思います)
そして最大値-1にてヒープを再度実行します。
最大値が1になったら置き換えソート終了です。
さぁこれから実際にプログラムを作成しないとですが
それは次回になりそうです。
しかしヒープソートより簡単な
バブルソートやクイックソートも再確認した方がよいのかもですね。
電験で検索していると
なかなか受からないだろう人に出会う。
私も超やる気ないので
そんな人ともお友達になりたいのですが
見つかりませんでした。。
寂しさに負けて
そんな人が解説していた
エンタルピーとエントロピーを調べてみた。
どうも気になっていたし
数日前に調べて挫折したが
今日改めて調べてみた。
まずエンタルピーは簡単で
U+PV
らしい。
内部エネルギーUとPVというエネルギーを足すだけ。
エネルギーの次元になるようだ。
そういえば大学でも簡単と言ったよなぁと今思い出した次第。
まぁ超おちこぼれでしたが。
この後エントロピーを調べる。
まぁここでのエントロピーは熱力学に限ることにするが
他に統計学と情報学があるらしい。
この2つは暇な時にまたとしておくことにする。
とりあえずエントロピーの定義は
Q/T
と出ている。
しかしこれではさっぱりイメージ出来ない。
エネルギーの次元から温度で割っていることは分かるが
熱量を温度で割る意味が分からない。
ここでカルノーサイクルという可逆機関を調べてみることにした。
見てると証明がみな永久機関は存在しないと言われてて
狐につつまれた説明だが
気にしないことにした。
カルノーの定理は
全ての可逆機関が同じ効率であることと
(第2種永久機関ではない)
全ての不可逆機関は、いかなる場合でも可逆機関を越えないことの
(永久機関ではない)
2つと理解した。
証明はここでは載せることを辞めておく。
ところでカルノーの定理と熱力学温度の関係を
繋げる記事が続けてあった。
これを元にエントロピー増大の法則が説明出来る。
また証明は割愛するが可逆機関の場合
Q1/Q2=T1/T2
と出ていて
このTは絶対温度と取ることで
上記の式となるうることが分かった。
ここまで理解出来ると
エントロピーが分かる気がした。
上記の式をさらに変形して
Q1/T1=Q2/T2
さらに不可逆機関も考慮して
Q1/T1 〈= Q2/T2
(T1〉T2。又Q1を得てQ2を捨てる)
となる。
この式はまさにエントロピー増大則である。
今まで分からなかった記号の意味が
少し分かりました。
∂▽∮というのは
ベクトルの微分演算子なんですね。
いきなり出てきたので
さっぱり分からなかったです。
しかしその前にベクトルの表記方法と加減乗除かな。
ベクトルの表記方法は
スカラ量と単位ベクトルを書く。
加減演算は単位ベクトルの方向毎にスカラ量を加減すればよいのですね。
乗除はとりあえず乗算しか分からなかったけど
内積と外積があって
内積は単位ベクトル毎にスカラ量の積を取り、それらを全て足すスカラ量。
あるいはそれぞれの絶対値を取り、さらにそのcosの3つの積を取るスカラ量。
外積はそれぞれの絶対値とsinを掛けたのがスカラ量。
外積の方向は左のベクトルから右のベクトルを見た際右ネジの方向。
次に微分。
▽はナブラと呼ぶベクトル演算子。
またハミルトンの演算子とも呼ぶ。
内実は偏微分の形。
▽=(∂/∂x)ax+(∂/∂y)ay+(∂/∂z)az
ここでax,ay,azのx,y,zは下付き添字。
またax、ay、azはそれぞれx,y,z方向の単位ベクトル。
ということなので
勾配を求めたい場合gradすなわち▽を取れば良く
gradV=▽V=(∂V/∂x)ax+(∂V/∂y)ay+(∂V/∂z)az
以下分からないので適当です。
発散は以下の式で表せます。
divA=lim(1/Δv)∮A・ds=▽・A
(limはΔv→0)
(Δvは微小体積)
(sは外向き法線方向のベクトル)
回転は以下の式で表せます。
rotA=lim(1/Δs)∮A・dl=▽×A
(limはΔs→0)
(∮はCに対して)
(lはsの周りの長さ)
またrotの実際の計算は以下の通り。
rotA=
| ax ay az |
|∂/∂x ∂/∂y ∂/∂z|
| Ax Ay Az |
(ax,ay,azは単位ベクトル)
(Ax,Ay,Azはそれぞれax,ay,azのスカラ)


上記の式で実際に
フレミングだの右ネジだのを入れられたら
理解したことになるが
導入の式をちきんと追えていないので
残念ながらまだ理解はしていない。