From df0605db512e7e4b7859ce7f170ba1496d39a505 Mon Sep 17 00:00:00 2001 From: rask24 <70057885+rask24@users.noreply.github.com> Date: Tue, 20 Feb 2024 14:12:25 +0900 Subject: [PATCH] update readme (#45) * fix Makefile * update README --- Makefile | 8 ++++---- README-ja.md | 28 ++++++++++++++++++++++++++++ README.md | 34 +++++++++++++++++++++++++++++++--- include/main.h | 23 +++++++++++++++++++++++ 4 files changed, 86 insertions(+), 7 deletions(-) create mode 100644 README-ja.md create mode 100644 include/main.h diff --git a/Makefile b/Makefile index e3ad8c6..7575916 100644 --- a/Makefile +++ b/Makefile @@ -12,7 +12,7 @@ CXXFLAGS = -std=c++17 -Wall -Wextra -Werror PROD_FLAGS = -O3 DEV_FLAGS = -O0 -g -fsanitize=address,integer,undefined -D DEV LEAK_FLAGS = -D LEAK -DEPFLAGS = -MMD -MP +DEP_FLAGS = -MMD -MP INCLUDE = -I $(INC_DIR) # flag options @@ -156,9 +156,11 @@ _checker_build: $(BONUS_OBJ) # util $(BUILD_DIR)/%.o: $(SRC_DIR)/%.c @mkdir -p $(@D) - @$(CC) $(CFLAGS) $(INCLUDE) $(DEPFLAGS) -c $< -o $@ + @$(CC) $(CFLAGS) $(INCLUDE) $(DEP_FLAGS) -c $< -o $@ @printf "$(GREEN)─$(RESET)" +-include $(DEP) + $(LIBFT): $(LIBFT_DIR) @make -C $(@D) @@ -226,5 +228,3 @@ $(GTEST_DIR): .PHONY: norm norm: norminette $(INC_DIR) $(SRC_DIR) $(LIBFT_DIR) - --include $(DEP) diff --git a/README-ja.md b/README-ja.md new file mode 100644 index 0000000..3181eec --- /dev/null +++ b/README-ja.md @@ -0,0 +1,28 @@ +### アルゴリズム +2段階に分けてソートを行う。 +1. stack_aからstack_bへ要素の大きさに従ってセグメントに分けをしながらpushする +2. stack_bからstack_aへセグメントが大きいいものから貪欲的にpushしてもどす + +1回目にざっくりとソートして、2回目にきっちりソートを行う。 + +#### 1.セグメントに分けてstack_bへpushする +以下のテーブルに示すようにセグメント数を決定する。 + +| スタックの要素数 | セグメント数 | +| ---- | ---- | +| ~ 99 | 1 | +| 100 ~ 249 | 3 | +| 250 ~ 499 | 5 | +| 500 ~ 749 | 7 | +| ... | ... | + +セグメントは大まかなグループわけであり、スタック要素の番号が小さければセグメント番号も小さい。 + +この過程ではstack_aをrotateしながら、セグメント番号が小さな要素から順番にstack_bへpushを行う。 + +#### 2.貪欲的にstack_aへpushする +stack_bのうち、セグメント番号が大きな要素から順番にpushして戻す。 +この時、stack_aが常に広義のソート状態を保つようにする。 +広義のソート状態とは、stackのtopとbottomを繋げて円環とみなしたときに、最小値と最大値が隣り合っていて、その他の要素はソートされている状態をさす。 +セグメント番号が同一な要素が複数ある場合は、広義のソート状態を保ちながらpushするのに必要な手数が最小な要素を選んでpushを行う。 +この時、必要な手数が最小であるとは各要素に対してpushの仕方4通りを全て計算し、かつ全ての要素のなかで最小な手数のことである。 diff --git a/README.md b/README.md index f6041b9..44e696e 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,33 @@
This repository contains the implementation of the push_swap project, which focuses on sorting a stack of numbers using a limited set of actions.
-