$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
数独ではじめるアルゴリズム 第一章 実装と高速化
Search
Ryosuke Uchiyama
September 25, 2020
Programming
0
130
数独ではじめるアルゴリズム 第一章 実装と高速化
Ryosuke Uchiyama
September 25, 2020
Tweet
Share
More Decks by Ryosuke Uchiyama
See All by Ryosuke Uchiyama
AWSでサーバレスな書籍管理アプリを作る
step63r
0
29
PythonでSlack通知botを作る
step63r
0
7
ChatGPT実践
step63r
1
330
IoT実践! 行先予定表を電子ペーパーで作る
step63r
0
10
React x Socket.ioで人狼サーバを作る 第一章 フロントエンド実装
step63r
0
10
深層強化学習で東方AI 第一章 DQNの基本
step63r
0
240
Build 2021 プレイバック
step63r
0
30
WPFで実践アプリ開発! 第四章 機能の実装 Part 2
step63r
0
42
WPFで実践アプリ開発! 第三章 機能の実装 Part 1
step63r
0
110
Other Decks in Programming
See All in Programming
Agentに至る道 〜なぜLLMは自動でコードを書けるようになったのか〜
mackee
5
2.4k
データファイルをAWSのDWHサービスに格納する / 20251115jawsug-tochigi
kasacchiful
2
100
AI時代もSEOを頑張っている話
shirahama_x
0
190
Feature Flags Suck! - KubeCon Atlanta 2025
phodgson
0
180
競馬で学ぶ機械学習の基本と実践 / Machine Learning with Horse Racing
shoheimitani
14
14k
dnx で実行できるコマンド、作ってみました
tomohisa
0
110
Duke on CRaC with Jakarta EE
ivargrimstad
0
290
Building AI Agents with TypeScript #TSKaigiHokuriku
izumin5210
5
1.1k
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
100
分散DBって何者なんだ... Spannerから学ぶRDBとの違い
iwashi623
0
140
Microservices Platforms: When Team Topologies Meets Microservices Patterns
cer
PRO
1
650
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
4
320
Featured
See All Featured
Git: the NoSQL Database
bkeepers
PRO
432
66k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
350
Visualization
eitanlees
150
16k
Rails Girls Zürich Keynote
gr2m
95
14k
GitHub's CSS Performance
jonrohan
1032
470k
A better future with KSS
kneath
239
18k
Writing Fast Ruby
sferik
630
62k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
1
59
How STYLIGHT went responsive
nonsquared
100
5.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
690
Mobile First: as difficult as doing things right
swwweet
225
10k
Transcript
数独ではじめるアルゴリズム 第一章 実装と高速化 Ryosuke Uchiyama step63r
はじめに
数独ってなに? 3✕3✕3のマスに1~9の数字を入れていくペンシルパズル 5 3 7 6 1 9 5 9
8 6 8 6 3 4 8 3 1 7 2 6 6 2 8 4 1 9 5 8 7 9 問題例 5 3 4 6 7 8 9 1 2 6 7 2 1 9 5 3 4 8 1 9 8 3 4 2 5 6 7 8 5 9 7 6 1 4 2 3 4 2 6 8 5 3 7 9 1 7 1 3 9 2 4 8 5 6 9 6 1 5 3 7 2 8 4 2 8 7 4 1 9 6 3 5 3 4 5 2 8 6 1 7 9 解答
手筋1 特定のマスに入る数値を絞る ★ 5 6 7 2 3 4 8
9 • ボックスより (2, 3, 4) は✕ • ヨコより (5, 6, 7) は✕ • タテより (8, 9) は✕ ★に入るのは 1 だけ! A B C 1 2 3 1 2 3 4 5 6 7 8 9
手筋2 特定の数値が入るマスを絞る 1 1 ★ 2 1 • C1の 1
でA1の1行目が潰れる • B1の 1 でA1の2行目が潰れる • A2の 1 でA1の3列目が潰れる 1 が入るのは★だけ! A B C 1 2 3
経緯
その昔……
step63r/NumpreTool02: Resolve NUMPRE (Number Place) automatically.
None
ところが……
None
None
None
_人人人人人人人人人_ > 解答できません <  ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
Software Design 8月号 技術評論社 Software Design 2020年8月号|技術評論社
ここに書かれていることをやってみました
探索アルゴリズム
グラフ構造と深さ優先探索(DFS) 0 1 2 3 4 11 5 8 6
7 9 10 12 13 14
数独の盤面をグラフ化 ※ここでは単純化のため3✕3の盤面で考える 2 3 1 2 1 2 2 3
1 2 2 1 2 2 3 1 3 2 1 2 2 3 1 3 2 1 1 2 2 3 1 3 2 2 1 2 2 3 1 3 2 3 1 2 2 3 1 1 2 1 2 2 3 1 1 2 1 1 2 2 3 1 1 2 2 1 2 2 3 1 1 2 3 1 2 2 3 1 1 2 3 1 1 2 2 3 1 1 2 3 2 1 2 2 3 1 1 2 3 3 1 2
実装してみた SudokuCpp python-sudoku
Demo
高速化
ベンチマーク(Python版) 4 9 2 4 8 2 1 4 6
6 9 4 8 3 1 3 5 6 7 7 5 6 2 6 1 3 5 2 中級クラス 0.6955 秒 2 1 8 4 9 6 3 1 2 7 9 6 4 6 9 3 7 専門級クラス 110.6565 秒 ※Intel Core i7-10700 @2.90 GHz 空きマスが増えるにつれて処理時間が長くなってしまう
改善アプローチ その1 入れられる数字の選択肢が少ないマスから埋めていく その2 一意に決まるマスはあらかじめ埋めておく
入れられる数字の選択肢が少ないマスから埋めていく 3 6 5 4 8 7 9 4 5
1 9 7 3 5 6 8 9 6 5 4 4 6 5 5 6 5 3 5 3 4 5 6 5 3 4 4 4 6 5 5 5 4 4 5 5 5 4 4 5 5 5 4 7 3 3 4 3 4 4 5 6 4 4 5 6 5 4 4 6 4 5 7 7 4 6 7 7 5 6 6 8 問題 入れられる数字の残数 ここから処理するよりも… この辺から処理した方が速い!
一意に決まるマスはあらかじめ埋めておく 3 6 5 4 8 7 9 4 5
1 9 7 3 5 6 8 9 問題 5 8 3 6 5 4 8 7 5 9 4 6 5 9 1 5 9 7 3 5 6 8 5 9 5 前処理後の問題
ベンチマーク比較(Python版) 測定不可(時間かかりすぎ) 1080.966 281.378 5.0795 0 200 400 600 800
1000 1200 対策なし 対策1 対策2 対策1&2 最高級クラスを30問解くのにかかった時間 (秒)
まとめ
たまにはゴリゴリ書くのも楽しいよ!!!!!!!!
今後やること • UI実装(WPFかXamarinあたり) • モバイル対応(iOSアプリをビルドする環境がない……つらたん……) • OCR(問題をカメラで撮ってAzure Cognitive Servicesとかで盤面認識&自動解答) •
マルチスレッド(たぶんやらないやつ)