
プログラムのアルゴリズムについて教えてください。
アマゾン等のECサイトでは「この商品を見た人は、この商品も見ています」「この商品を買った人は、この商品も買っています」等の機能がついています。こういった機能はどう実現しているのでしょうか。
単純に考えれば、2次元配列(例えば$kanrenとか)を作り、商品名や商品IDを添え字にして
$kanren["shohin_a"]["shohin_b"]++
として関連度をカウントし、カウント数上位から表示する方法を思いつきます。
しかし、仮に商品が1万点とかあったとしたら、相当なメモリ使用量になります。データベースは詳しくないので分かりませんが、1万×1万個のデータを扱うのは負担は大きそうだなと思います。
またカウントアップのタイミングも難しく感じます。直前に見た(買った)商品だけでカウントアップするのでは関連度を出すのに不十分な気がしますし、かと言って過去10商品(過去10ページ)とかを記憶してカウントアップする場合、上手くやらないと2重・3重にカウントアップしてしまいそうです。
色々なサイトに実装されているので、何か上手なアルゴリズムがあるのだろうと思います。
そちらを教えていただければ。サイトのURL等や、書籍の名前でも構いません。
一応、使用言語はPHPを考えています。ですので、もしライブラリ等あるのであれば、そちらを紹介いただくのでも構いません。
ちなみに、当方のスキルですが、趣味プログラマとして30年ほどの経歴はあります。言語もBASIC、C、C++、Javascript、Perl、Pascal などの経験があります。オブジェクト指向プログラミングも分かります。あくまで自分の趣味の域ですので、何かフリーソフトを公開したり等の経験はないレベルですが、アルゴリズムの説明は概ね理解できると思います。また、データベースの利用経験は全くありませんのでSQLなどは分かりませんが、一般的な意味でのデータ管理の範囲ならば普通に理解できると思います。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
クラスター分析をしていると思いますよ。
http://www.albert2005.co.jp/technology/mining/cl …
計算はDWHによるバッチ処理でしょうね。
広告なんでリアルタイムに変更する必要はありませんから
マシンリソースについても
amazonだったら1万台以上の分散処理していると思われます
クラスター分析ですか。
ざっと読んでみましたが、面白いです。
何かのパラメータで対象をマッピングして、その距離を比較することによって、クラスターを形成…ってところでしょうか。
で、「ユーザーをパラメータにして商品をマッピングしてクラスター化し、対象商品と同じクラスター内の商品を表示する」か「商品をパラメータにしてユーザーをマッピングしてクラスター化し、対象ユーザーと同クラスターのユーザーの好みの商品を適当に表示する」みたいな感じなのですね。
計算タイミングも、確かに「広告なんでリアルタイムに変更する必要はありません」に尽きますね。あくまで便利機能と割り切れば、分散処理まで使わずとも、例えば7000件のデータを1000件ずつに分けて1週間かけて計算しても良いのでしょうし(1週間の間のデータの動きで、計算日によって結果に不整合が出るが、便利機能と割り切る)。
何となく、方向性が見えてきた気がします。ありがとうございます。
No.5
- 回答日時:
私もその昔PC-6001で打ち込みDTMやってました
カセットテープに保存したデータのロード時間が
打ち込んだ音楽より長いという懐かしい時代をすごしました
PCとは何をやるにも高価につき大変な時代でした
閑話休題、それを考えるといまやPCは安く、アプリはほぼタダという恵まれた時代です。
データベースも基本無料でそうとう高レベルの処理が可能になりましたので
やらない手はないと思いますよ。
古プログラマーの方なら分かってもらえると思いますが、昔はどんな処理でも自分でゴリゴリと書いていて、それがまた楽しかっただけに、ついつい車輪の再発明に走ってしまう誘惑が…(笑)
No.4
- 回答日時:
No3です
間違えた
×RDBが必須であるとは思いますけどね
○RDBが必須であるとは思いませんけどね
どちらにしても、すべての技術を理解するには人生は短すぎると思います
No.3
- 回答日時:
RDBが必須であるとは思いますけどね
それこそ所詮広告なんでトランザクション管理は重要でないです。
KVSなんかで処理を軽くしてもよいです。
30年前、それこそBASICやPASCALなんて連想配列すら使えない環境で、データ管理を全部自前でやらなきゃいけない状況からのスタートなので、(体系だった知識ではないですが)RDB的な思考やデータ設計はできるんですけれども。
ただそれ故に、SQL使ういわゆる「データベース」を勉強するモチベーションがわかないんですよね(苦笑)。
今やせっかく簡単にデータを自在に高速で堅牢に扱える環境が(タダで)使えるのだから、車輪の再発明みたいなことしてちゃダメだろと分かりつつ、ブラックボックス的なの嫌だなとか、勉強する時間と自力実装する時間とどっちが短いかなとか、ついつい考えてしまいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
正しい五十音順について
-
Officeのラスタ画像の拡大縮小...
-
vbaで、連立方程式を解く方法に...
-
ドロネー三角形のプログラム
-
☆★大学院入試のアルゴリズムに...
-
gooという検索エンジンの後にGo...
-
c言語で画像から文字を認識 キ...
-
乱数って・・・
-
アルゴリズムとプロトコールの違い
-
ファイルの開き方
-
VBAで関数をつくる
-
あるプログラムのコマンドライ...
-
65536は2の何乗なのでしょうか?
-
XnViewにwebpを「いつも開く」...
-
C++でアボート(Abort)で処理が...
-
Excelで4096点以上のFFTの方法
-
引き放し法による除算アルゴリ...
-
PICマイコンのコピー(クローン...
-
Excelに埋め込んだVBAのプログ...
-
CreateObject関数について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
正しい五十音順について
-
BCDについて
-
経路探索について
-
[ EXCEL VBA ] 図形を読み込む...
-
ハノイの塔のさいきアルゴリズ...
-
最大公約数を求めたい!
-
C♯で電卓を作成しています。演...
-
アルゴリズムとプロトコールの違い
-
ゲームプログラミングC/C++、SR...
-
シードを考慮したトーナメント...
-
アルゴリズムが苦手な人の、特...
-
c言語で画像から文字を認識 キ...
-
Stuck
-
Dijkstraて
-
グループを均等に分けるには?...
-
(文字列検索の手法について)...
-
多変数関数の最小値を求めるプ...
-
ハッシュアルゴリズム
-
期間重複チェックがわかりません
-
情報Iの「アルゴリズムの表現」(...
おすすめ情報