Redisの核心技術とキャッシュ問題の本質的理解
以下は、Redisに関する代表的な技術課題とその本質を整理した内容です。
1. Redisをキャッシュとして選ぶ理由
Redisは単なるキャッシュではなく、多機能なインメモリデータストアです。主な利点は以下の通りです:
豊富なデータ構造:String、Hash、List、Set、Sorted Setに加え、HyperLogLog、Geo、Bloom Filter(RedisBloomモジュール)などもサポート。
永続化機 ...
6月2日 19:01 投稿
C言語における配列操作とアルゴリズムの基礎実装
C言語における配列のメモリレイアウトの理解から、ソートアルゴリズム、進数変換、行列演算といった実用的なアルゴリズムの実装まで、いくつかの例を通して解説します。
1. 配列のメモリレイアウトとアドレス
配列はメモリ上で連続した領域を占有します。以下の例では、1次元配列および2次元配列のアドレスと要素の配置を確認できます。
#include <stdio.h>
void i ...
5月31日 02:09 投稿
C++における二分探索木の実装と操作
二分探索木とは
二分探索木(Binary Search Tree: BST)は、以下の条件を満たす二分木構造です:
左部分木に含まれるノードの値は、常に親ノードの値より小さい
右部分木に含まれるノードの値は、常に親ノードの値より大きい
左右の部分木もまた二分探索木を満たす
基本操作
探索(Search)
探索操作は以下のように行われます:
ルートノードから比較を開始します
探索 ...
5月30日 20:39 投稿
宿舎管理システムの設計と実装(C言語によるデータ構造の応用)
概要
本稿では、データ構造とアルゴリズムに関する課題として開発した「宿舎管理照会ソフトウェア」について紹介する。学生の宿舎情報を効率的に管理・検索・操作することを目的とし、C言語で実装された単方向連結リストを基盤としたシステムである。主な機能には、学生情報の追加・削除・検索・ソート・表示が含まれる。ユーザーインターフェースはテキストベースのメニュ ...
5月30日 11:45 投稿
リンクリストの概要
単一リンクリストノードの定義
LeetCodeでの単一リンクリストノードの定義は以下の通りです:
package com.wang.base.linkedList;
public class Demo01 {
class ListNode{
int val;
ListNode next;
ListNode(int x){
val=x;
}
}
}
しかし、実際のプログラミング言語では、より複雑な構造が使われます:
package co ...
5月30日 03:32 投稿
競技プログラミング問題集 SMU Spring 2023
A. 重複要素の削除
与えられた数列から重複要素を削除し、最初に出現した要素のみを保持するアルゴリズム。
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> removeDuplicates(const vector<int>& nums) {
unordered_map<int, int> countMap;
vector<int> result ...
5月29日 14:24 投稿
C言語における単方向連結リストの仕組みと実装方法
連結リストの基本概念とノード定義配列などのシーケンシャルなデータ構造では、要素の挿入や削除に伴うデータの移動コストが高くなる。この問題を解決するため、各要素をポインタで連結する連鎖構造(単方向連結リスト)が用いられる。単方向連結リストには以下の特徴がある。論理的に隣接する要素が物理的なメモリ上でも隣接している必要がない。ランダムアクセスが不可能 ...
5月29日 08:29 投稿
二分木問題の解法と実装
二分木の基礎理論
二分木は各ノードの子ノード数が最大2の木構造です。主要な形態として完全二分木と完全二分木が存在します。データ格納方式には配列を用いた順序格納とポインタを用いたリンク方式があります。走査方法は以下の通りです:
先行走査(深さ優先)
中間走査(深さ優先)
後行走査(深さ優先)
階層走査(幅優先)
class BinaryNode:
def __init__(self ...
5月28日 10:53 投稿
重量値セグメント木と動的ノード作成
目次- ブルートフォース法 (1)
ブルートフォース法 (2)
重量値セグメント木
演習問題
はじめに主席木を学習中に、重量値セグメント木の学習ノートを更新しておくのを思い出しました
まず、以下の問題を考えてみましょう:
配列に対して以下の操作を行います:
操作 (1):配列中の第k小さい要素を問い合せます(答えは存在すると仮定)。
操作 (2):ある要素を変更しま ...
5月28日 02:10 投稿
バブル、挿入、クイック、マージソートの比較
バブルソート
隣接要素を比較して交換するアルゴリズム。最大値を末尾に移動させる処理を繰り返す。
public class BubbleSort {
public static void executeSort(int[] array) {
int length = array.length;
for (int i = 0; i < length - 1; i++) {
for (int j = 0; j < length - 1 - i; j++) {
if (array[j] > array[j ...
5月27日 19:15 投稿