ヒープ構造の理解と実装:データ構造入門から実践まで
前書き
コンピュータサイエンスにおいて、ヒープ(Heap)は優先度付きキューの実装や効率的なソートアルゴリズム(ヒープソート)に使われる重要なデータ構造です。ヒープは完全二分木をベースにしており、配列による順序表現が可能で、メモリ効率と操作速度のバランスに優れています。
1. 木構造の基礎
1.1 木とは
木は非線形データ構造で、ノードの階層的集合です。根( ...
5月16日 12:26 投稿
C++プログラミングの重要な注意点とベストプラクティス
1. イテレータとペアの値へのアクセス方法の違い
イテレータを介して値にアクセスする場合と、ループ内で直接ペアオブジェクトにアクセスする場合で、ドット演算子とアロー演算子の使い分けが必要です。
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
std::unordered_map hash_map;
for(int i = 0; i < ...
5月16日 00:32 投稿
【データ構造とアルゴリズム】(24)高度なデータ構造とアルゴリズム設計:二つのポインタを用いた問題の解法と実装例
4.6 Leetcodeにおける二つのポインタ手法
以下の問題はすべて二つのポインタを用いるものであり、加えて以下のケースも含まれる:
Leetcode3: 最長の重複しない部分文字列(ハッシュテーブルの章で扱った)
ホーソーのクイックソート
二分探索
など
ゼロの移動 - Leetcode 283
public class ZeroMoveLeetcode283 {
static void moveZeros(int[] nums) {
int ...
5月15日 22:47 投稿
競技プログラミングの復習と解法まとめ
7月は主に学校の夏期個人戦に参加し、その他の時間は主に学習やゲームに費やした。
上海大学プログラミングコンテスト 2024
上海地区のコンテストで、結果は芳しくなかった。主に実力不足が原因。
問題E - 無線ソフトウェア日
文字の出現頻度をカウントし、必要な文字数の最小値を求める問題。
#include <bits/stdc++.h>
using namespace std;
int main() {
int ...
5月15日 21:11 投稿
シングルリンクリストの詳細な実装(C言語)
シングルリンクリストとは
シングルリンクリスト(Singly Linked List)は、データをノードとして格納し、各ノードが次のノードへのポインタを持つ線形データ構造です。配列や順序リスト(シーケンシャルリスト)と異なり、データの挿入・削除が柔軟で、必要に応じて動的にメモリを確保できます。
シングルリンクリストの構造
シングルリンクリストは、各ノードが2つの部 ...
5月15日 05:09 投稿
線形リストの順序リスト実装(Pythonによる記述)
線形リストは2種類の格納形式に分けられます:順序格納と連結格納
順序格納:
順序格納では、線形リストのノードは論理順に連続したアドレスのメモリ領域に格納されます。この方法で格納された線形リストを順序リストと呼びます。2つの特徴があります:1. 論理順序と物理順序が一致している;2. データ要素間の関係はコンピュータ内での「物理的な位置の隣接」によって表現 ...
5月14日 20:08 投稿
C言語によるデータ構造の実装とアルゴリズム設計
線形リストの特性と比較
配列ベースリストの特徴
配列を用いたリストはメモリ空間を事前に確保する必要があるため、サイズ変更が難しいが、要素へのアクセスは定数時間で可能である。挿入や削除を行う際には、対象位置以降のすべての要素を移動させる必要があり、処理効率が低下する可能性がある。
単方向連結リストの特徴
連結リストは動的メモリ割り当てにより柔軟なサ ...
5月14日 18:06 投稿
バイナリツリーの基礎理論と再帰的走査アルゴリズム
バイナリツリーの基本概念
バイナリツリーは計算機科学における重要なデータ構造であり、多くのアルゴリズムでスタックを用いて実装されます。
バイナリツリーの分類
完全二分木 (Full Binary Tree)
すべてのノードが0個または2個の子ノードを持ち、すべての葉ノードが同じ深さにある二分木を完全二分木と呼びます。深さkの完全二分木は2^k-1個のノードを持ちます。
完 ...
5月14日 12:57 投稿