ホーム » 2023 (ページ 10)
年別アーカイブ: 2023
情報構造論ガイダンス2023
基本的なガイダンス
情報構造論のシラバスを、ここに示す。プログラムを作成する上で、どのような考え方で作れば処理速度が速いのかを議論する。基本的に、4回のテストのたびに、レポート課題を実施する。各テスト毎の評価は、テスト素点と、「テスト素点×60%+レポート評価×40%」の良い方とする。テストに自信のない人は、レポート課題をきちんと提出すること。
プログラムを評価する3つのポイント
まずは以下を読む前に、質問。
- あなたが”良い”プログラムを作るために何を考えて作りますか? ※1
- ここまでの段階で3つの要点を考えメモしてください。
具体的な言葉で要点を考えると、いろいろなものがでてくるだろうが、端的なポイントにまとめると、次の3つに分類できるはずである。
- プログラムの速度
- プログラムのわかり易さ
- メモリの使用量
プログラムを作る場合、この3要素がトレードオフの関係にある。プログラムの速度を優先すると、プログラムが分かり難くなったり、メモリを大量浪費するものだったりする。
メモリの使用量の影響
メモリを大量に使用すると、どういった影響がでるのか? OSの機能を知らないと、メモリ(主記憶)を使い果たしたら、プログラムが動かないと思うかもしれないけど、最近のOSは仮想メモリ機能があるため、主記憶がメモリが足りなければ待機状態のプロセスのメモリを補助記憶に保存することで、プログラムを動かすことはできる。(仮想記憶)
しかし、プロセスが切り替わる度に、補助記憶への読み書きが発生するため、処理性能は低下する。(スワッピング)
int 型のメモリ使用量
int 型は、プログラムで扱う一般的な整数を扱うのに十分なデータ型。
32bit の0/1情報の組み合わせで、232通りの情報が表現でき、負の数も扱いたいことから2の補数表現を用いることで、-231~0~231-1 の範囲を扱うことができる。231 = 2×210×210×210 ≒ 2×10003
32bit = 4byte
ソフトウェアとアルゴリズムとプログラム
用語として、ソフトウェア、アルゴリズム、プログラムという表現があるが、この違いは何か?
- アルゴリズム – 計算手順の考え方。
- プログラム – アルゴリズムを特定のプログラム言語によって記述したもの。
- ソフトウェア – プログラムと、その処理に必要なデータ。
(日本語を変換するプログラムは、日本語の辞書データが無いと動かない/役に立たない) - パラダイム – プログラムをどう表現すると分かりやすいか?
トレードオフ関係をプログラムで確認
例えば、配列の中から、目的データを探すプログラムの場合、最も簡単なプログラムは以下の方法であろう。
// ((case-1)) // 単純サーチ O(N) #define SIZE 1024 int a[ SIZE ] ; // 配列 int size ; // 実際のデータ数(Nとする) int key ; // 探すデータ for( int i = 0 ; i < size ; i++ ) // 先頭から1つづつ比較、シンプル if ( a[i] == key ) break ;
しかし、もっと早く探したいのであれば、2分探索法を用いるだろう。でも、このプログラムは、case-1 のプログラムよりは分かり難い。(速度⇔わかり易さ)
// ((case-2)) // 2分探索法 O(log N) int L=0 , R=size ; // 速いけど、プログラムは分かりにくく(複雑に)なった while( L != R ) { int M = (L + R) / 2 ; if ( a[M] == key ) break ; else if ( a[M] < key ) L = M + 1 ; else R = M ; }
でももっと速いプログラムとしたければ、大量のメモリを使えば一発でデータを探せる。(速度⇔メモリ使用量)
// ((case-3)) // 添字がデータ O(1) // 探すデータが電話番号 272925 のような 6 桁ならば、データを以下の様に保存すればいい。 int a[ 1000000 ] ; a[ 272925 ] = 272925 ; : // データを探したければ a[ 電話番号 ] で探せばいい printf( "%d\n" , a[ 621111 ] ) ; // 処理速度はクソ速いけど、メモリは大量消費
良いプログラムを作るとは
プログラムを作る時には、メモリが大量に使えるのなら、速いものを使えばいい。だけど実際には、そのシステムには限られた予算があるだろう。
実際には、限られた予算からメモリやCPUが決まり、その会社の人員やら経験やらでプログラム開発に使える時間がきまる。プログラムをデザインするとは、限られた条件の中で、適切な速度のコンピュータ、適切な量のメモリでコンピュータを用意し、限られた納期の中でシステムを完成させることである。
皆さんも、ゲームを買った時、処理速度が遅くてキャラクターがカクカク動いたら幻滅するでしょ?ゲームがバグですぐに変な動きしたらキレるでしょ!(参考) 発売日の予定どおりに買えなかったらさみしいでしょ!!プログラムがでかすぎてローディングに時間がかかったら、寝ちゃうでしょ!!!
クラウドサーバ等の Ubuntu 22 への更新
Windows PC の wsl2 の設定を間違えて、/etc/wsl.conf が触れなくなり、特に slogin とか latex 環境とかが動けばいいや…の使い方なので、Ubuntu をアンインストールして、新しい Ubuntu をインストールする。ここで、Ubuntu 20(focal) から Ubuntu 22(jammy)への更新。自宅 Windows なども同様にアップグレードを行った。
んで、改めて作業をしていると、自分が管理しているクラウドサーバでも、何台か Ubuntu(focal) が残っている。aptitude safe-upgrade をしていても、linux-image-5.4 あたりのままだし、ここもアップグレード。
といっても、”do-release-upgrade” を実行するだけ。かなり時間かかるけど。
R5高専プロコンin福井、ポスター原案選定
R5年度の全国高専プログラミングコンテストは、福井高専で開催となります。これに合わせ、昨年のポスター図案の募集の応募作のポスター図案を元に、開催内容などを盛り込んだポスターを印刷業者にて作成しました。文字の割り振りなどのレイアウトが3案あるのですが、福井高専の教職員・学生の皆さんにご意見を頂けると助かります。別途案内の Forms にて1つを選んで回答をお願いします。
![]() 案1 |
![]() 案2 |
![]() 案3 |
授業アンケート2022後期
データベース
ポイント86.3
chatGPT、計算問題もこなすのかよ
今回、4EI 情報構造論の期末試験の1問目を chat GPT に解いてもらった。
福井高専の解説ではお得意の”知ったかぶり”を発揮しちゃったけど、処理時間のオーダー問題だと、具体的な数値を交えてちゃんと計算してらぁ。しかも、オーダー記法だからあくまで概算の予想値ということを踏まえ、1024msec だけでなく 約 1 秒と答えている。
chatGPTに福井高専について聞いてみた。
- 福井工業高等専門学校について教えて
- 福井工業高等専門学校(ふくいこうぎょうこうとうせんもんがっこう)は、福井県鯖江市に所在する、工業系の高等専門学校です。以下に、福井工業高専の特徴や学生生活についていくつかの情報をまとめました。
学科・コース:福井工業高専には、電気電子工学科、機械工学科、材料工学科、情報工学科の4つの学科があります。また、各学科にはそれぞれコースが設置されており、専門分野をより深く学ぶことができます。
実践教育:福井工業高専では、実践教育に力を入れています。実験や実習が多く、現場に近い状況で学ぶことができます。また、学生たちは企業との連携プロジェクトに参加することができ、就職につながる実践的なスキルを身につけることができます。
学生生活:福井工業高専には、多数のサークル・同好会があり、学生たちは自主的に活動することができます。また、学生自治会や学生団体も盛んで、文化祭やスポーツ大会などのイベントが開催されます。学生寮やアパートもあり、学生生活を充実させることができます。進路:福井工業高専を卒業した学生たちは、企業就職や大学進学、公務員採用試験合格など、様々な進路を選択することができます。また、福井工業高専は工業系の高等専門学校として、産業界からの需要が高く、高い就職率を誇っています。
福井工業高等専門学校は、実践的な教育に力を入れ、現場で即戦力として活躍できる人材を育成しています。福井県を中心に、産業界での需要が高く、就職に有利な学校として知られています。
Regenerate response
情報構造論-2022-講義録
- 情報構造論ガイダンス2022
- 繰り返し処理と処理時間の見積もり
- 再帰呼び出しの処理時間の見積もり
- 再帰呼び出しと再帰方程式
- ポインタ処理
- malloc()とfree()
- 様々なデータの覚え方のレポート課題
- リスト構造の導入
- リスト処理
- リストへの追加処理
- スタックと待ち行列
- ライブラリと分割コンパイル
- 集合とリスト処理
- ランダムアクセス・シーケンシャルアクセスから双方向リスト
- 双方向リスト
- 2分探索木
- 2分探索木の処理とデータ追加処理
- AVLと意思決定木と演算子
- 演算子と言語処理系
- 2分木による構文木とデータベースとB木
- ハッシュ法(導入)
- ハッシュ衝突対策と文字列のハッシュ関数
- 共有のあるデータの取扱い
- ガベージコレクタとスタック領域
- 動的メモリ管理 malloc() と free()
- 関数ポインタ