学生オリンピック「私はプロです」:方向性「プログラミングと情報技術」

今日は、学生オリンピアード「 私はプロです」の登録の最終日です。 そして、「プログラミングと情報技術」の方向性について話します。



ITMO大学の分野におけるオリンピアードのゼネラルパートナーは、「プログラミングとIT」、「情報とサイバーセキュリティ」、「 ビッグデータ 」-ズベルバンクです。





クリスティーナ・モリロ/ペクセルズ/ PD



「私はプロだ」というオリンピックに関する一言



学生オリンピアード「私はプロです」は、人文学と専門技術の学士と修士のための競争です。 オリンピックで成績を収めた学生は、試験なしでロシアの大学に入学することができます。 同時に、ロシアの大手IT企業であるYandex、Sberbank、IBS、Mail.Ruでインターンシップを受講します。



オリンピックは11月24日に始まります( 今日は登録の最終日です )-これは予選ステージの開始日です。 オンライン形式で開催されます。 次のラウンドに参加する参加者は、競技のフルタイムステージに分類されます。 2019年2月に国内の様々な大学で開催されます。



オリンピアードのどのエリアを監督していますか



ITMO大学は、「プログラミングとIT」、「情報とサイバーセキュリティ」、「 フォトニクス 」の分野でタスクを準備しています。



今年でも、2つの新しい領域を導入しました。





次に、「プログラミングと情報技術」の方向性について詳しく説明します。



「プログラミングとIT」の方向について



ITMO大学は、「私はプロです」オリンピアードに近いレベルで最大のイベント主催者の1つです。

私たちは、多数の創造的な競争とコンピューターサイエンスとプログラミングの競争を開催しています。 これらは学校のオリンピック、たとえば、 学童向けの全ロシアチームオリンピック 、オリンピックの「 情報技術 」、 IOIPです。 また、学生オリンピック、特にICPCプログラミング世界選手権の準決勝も開催します。
「プログラミングと情報技術」の方向に取り組むとき、IT分野で他のテーマ別の競争イベントを実施する豊富な経験と同僚の専門知識を考慮しました。 たとえば、今年からCodeforcesポータルの作成者および開発者であるMikhail MirzayanovがITMO大学で働いています。



ITMO大学による「プログラミングと情報技術」の方向性の準備は、対応する学部の従業員によって行われます。 これはDean Parfenov Vladimir Glebovichであり、スポーツプログラミングのITMO学生プログラミングチームの准教授兼トレーナーであるAndrey Sergeyevich Stankevichです。



大学で専門分野を教えているIT企業の従業員、および共催大学の従業員は、オリンピアードのタスクの設計と開発に参加しています。 これらの大学は、ウラル連邦大学、北東連邦大学です。 Ammosova、サラトフ州立大学、サマラ大学。



オリンピックの準備方法


プログラミングと情報技術 」の方向性は、数学、コンピューターサイエンス、および信頼できる安全なソフトウェアを開発する能力に関する知識に基づいています。 準備中、学生は計算の複雑さの理論、形式言語と文法の理論、計算アーキテクチャの構築の原理、OOPと並列プログラミング、およびリレーショナルデータベースの理論を繰り返すことをお勧めします。



教師が用意したテーマ別ウェビナーをご覧になることをお勧めします。 たとえば、このビデオでは、ストレージの問題とオペレーティングシステムについて説明しています。





ウェビナーの第2の方向は、アルゴリズムとデータ構造に関するものです。





予選と最終段階の準備では、理論的な問題だけでなく、実際的な問題にも注意を払う必要があります。 したがって、予選段階と最終段階で発生する可能性のあるタスクの例をいくつか示します。 これらは昨年学生に提供された実際のケースです。

タスクの例:クエリキューの操作をシミュレートする抽象プログラミング言語のコードを指定します。



タスクのコード
queue tasks; task worker_task; void do_task(task) { sleep(random()) : } void request() { while (true) { new_task = new task(); if (worker_task == null) worker_task = new_task; else if (queue.size() < 5) queue.push(new_task) sleep(random()) } } void worker() { while (true) { if (worker_task == null) { sleep(1000); } else { do_task(worker_task); if (queue.notEmpty()) worker_task = queue.pop(); } } } main() { thread worker_thread(worker); for (int i = 0; i < N; ++i) { threadr tr(request) } }
      
      







別のスレッドでワーカープロセスが起動し、N(N> 1)個の要求スレッドからのタスクを処理します。 do_taskメソッドは、タスクの実行を模倣します。



次のうち、正しいものはどれですか?



  1. worker_task変数による競合状態
  2. キューには6つのアイテムを含めることができます
  3. キューが空でない場合でも、システムはタスクの実行を停止する場合があります。
  4. システムは、タスクが到着すると常にタスクを完了します。
  5. システムは、すべての着信タスクを完了することが保証されています。


回答:1、2、3
さらに、例として、最終段階からタスクを提供します。 これは、オペレーティングシステムとプロセススケジューリングに関連するタスクです。

タスクの例:常に1つのプロセスの計算を実行できる1つの中央処理装置を備えたコンピューティングシステムを考えます。 システム時間は離散的であり、条件ティックで測定されます。



タスクテキストの継続
システムには3つのジョブソースがあります。 各タスクは、計算が完了すると終了するプロセスを生成します。 タスクの各ソースについて、このソースからの最初のタスクが出現するメジャー番号、後続の各タスクが出現するメジャーの数、およびこのソースからのタスクを完了するために必要なメジャーの数がわかります(同じソースからのすべてのタスクは完了するのに同じ時間が必要です) 。







マルチレベルキューは、タスクが完了する順序を制御するために使用されます。 各ソースに対して、このソースのタスクから独自のFIFOキューが形成されます。 キューが優先されます。 特定のタスクを完了するプロセスは、優先度の高いキューにタスクがない場合にのみ開始できます。



同じビートですぐに表示されるタスクは、プロセッサがフリーであるか、実行のために立ち上がると実行を開始します。 実行開始後、プロセスは終了するまで中断されません。 次のプロセスの実行が完了した場合、次のステップは、空でないキューの最高優先度からプロセスを選択することです。 このビートに現れたタスクもこの選択に参加します。



応答時間は、特定のタスクが表示されてから実行が終了するまでに経過したメジャーの数と見なされます。 事故は、タスクの1つの応答時間が50クロックサイクルを超えた状況と見なされます。



次のソースジョブ3-Xが表示されるまでのクロックサイクルの最小数を決定します。この時点で、システムは緊急事態なしで無制限に動作します。



  • タスクが表示された瞬間、これが指定されたメジャーの最初の瞬間であると仮定します。 したがって、ソースからの最初のタスクのクロックサイクルが1で、次のタスクまでのバーの数が5だと言うと、このソースからの2番目のタスクはバー6の先頭に表示されます。
  • 次のタスクを完了するために切り替えるのに必要な時間は重要ではないと見なされ、タスクを解決するときに考慮されません。
  • 各ソースには、1から始まる独立した割り当て番号があります。


回答:24

トピックに関する素晴らしい情報は、オリンピアードのウェブサイト上の承認済みリストからのテーマ別プログラミングコースにあります。



追加の関連リンク:





All Articles