私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレ+ JavaScript の質問用スレッド vol.141 +
JavaScript スレッド一覧へ / JavaScript とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
最近、Ruby信者をいろんなスレで見かけるのは、Rubyが下火になっているからか
多言語の機能を取り込むのは良いことだが、機能に拘るのは偏食と変わらないな
多言語の機能を取り込むのは良いことだが、機能に拘るのは偏食と変わらないな
文字列が入った配列(例として["aaa","aaa","bbb","bbb","ccc","ccc",…以下1000個ほど続くとする])があるとして、
この配列を「できるだけ似た文字列が並ばないように」並び替える方法ってどんなものが考えられますか?
つまり["aaa","bbb","ccc","aaa","bbb","ccc",…] となるように並べ替えたいです
言い換えれば「できるだけ似てない文字列が隣合って並ぶように」バラけさせるアルゴリズムです
レーベンシュタイン距離でというのも考えましたが「1つ前の文字列からもっとも遠い文字列を」短絡的に並べていくのでは、上記の例でいうと
["aaa","ccc","aaa","ccc","bbb","bbb",…]
というふうに、もっとも遠い文字列を使い果たした後はむしろ近いものが並んでしまうのではないかと危惧してます
この配列を「できるだけ似た文字列が並ばないように」並び替える方法ってどんなものが考えられますか?
つまり["aaa","bbb","ccc","aaa","bbb","ccc",…] となるように並べ替えたいです
言い換えれば「できるだけ似てない文字列が隣合って並ぶように」バラけさせるアルゴリズムです
レーベンシュタイン距離でというのも考えましたが「1つ前の文字列からもっとも遠い文字列を」短絡的に並べていくのでは、上記の例でいうと
["aaa","ccc","aaa","ccc","bbb","bbb",…]
というふうに、もっとも遠い文字列を使い果たした後はむしろ近いものが並んでしまうのではないかと危惧してます
>>153
「似た文字列」を定義する事から始めては?
「似た文字列」を定義する事から始めては?
「似た文字」は文字の類似度を数値で返す関数がある
という前提でいいだろ
という前提でいいだろ
じゃあsortにその関数使ったコンパレータぶっ込んで終わり。
はい次。
はい次。
>>153
レーベンシュタイン距離でいいんじゃないか?
1. 同一文字をまとめて、ユニークな文字列の値、出現回数をまとめた配列(or Map)を作る
2. 隣接要素のレーベンシュタイン距離がしきい値を越えるように並べ替える
3. 1周する
4. 各要素の出現回数を -1
5. 全要素が出現回数0なら終了。一部に出現回数0があったら、2.へ、それ以外は3.へ
レーベンシュタイン距離でいいんじゃないか?
1. 同一文字をまとめて、ユニークな文字列の値、出現回数をまとめた配列(or Map)を作る
2. 隣接要素のレーベンシュタイン距離がしきい値を越えるように並べ替える
3. 1周する
4. 各要素の出現回数を -1
5. 全要素が出現回数0なら終了。一部に出現回数0があったら、2.へ、それ以外は3.へ
例えば範囲が、1~100 なら、
1, 100, 2, 99 みたいに取っていくと、
最後には、50 近辺の数字ばかりが残るから、ダメ!
無数のアルゴリズム・シミュレーションを繰り返して、
合計距離が多くなるように、しないといけない
1, 100, 2, 99 みたいに取っていくと、
最後には、50 近辺の数字ばかりが残るから、ダメ!
無数のアルゴリズム・シミュレーションを繰り返して、
合計距離が多くなるように、しないといけない
// 出現回数は考慮しないものとする
// 小文字アルファベット a-z から選ぶものとする
const length = 100
const threshold = 10
let a = []
let place = []
let aryResults = []
for (let i = 0; i < 26; i++) {
let strTmp = String.fromCharCode(0x61 + i)
a.push(strTmp)
place.push(-threshold)
}
for (let i = 0; i < length; i++) {
let t = i - threshold
let setTmp = new Set(a)
for (j = 0; j < 26; j++) {
if (place[j] > t) { setTmp.delete(a[j]) }
}
const arrTmp = [...setTmp]
let x = (Math.random() * arrTmp.length | 0)
place[x] = i
aryResults.push(arrTmp[x])
}
console.log(aryResults)
// 小文字アルファベット a-z から選ぶものとする
const length = 100
const threshold = 10
let a = []
let place = []
let aryResults = []
for (let i = 0; i < 26; i++) {
let strTmp = String.fromCharCode(0x61 + i)
a.push(strTmp)
place.push(-threshold)
}
for (let i = 0; i < length; i++) {
let t = i - threshold
let setTmp = new Set(a)
for (j = 0; j < 26; j++) {
if (place[j] > t) { setTmp.delete(a[j]) }
}
const arrTmp = [...setTmp]
let x = (Math.random() * arrTmp.length | 0)
place[x] = i
aryResults.push(arrTmp[x])
}
console.log(aryResults)
>>153
うーん
定性的な部分をどうにかしないと書けないな
「似た文字列」
何をもって「似ている」と判断するか基準不明
「できるだけ似た文字列が並ばないように」
→どの範囲で許されるのか
高田馬場1丁目1番地、2番地…
高田馬場2丁目1番地、2番地…
高田馬場3丁目1番地、2番地…
高田馬場4丁目1番地、2番地…
高田馬場5丁目1番地、2番地…
西早稲田1丁目1番地、2番地…
西早稲田2丁目1番地、2番地…
西早稲田3丁目1番地、2番地…
西早稲田4丁目1番地、2番地…
西早稲田5丁目1番地、2番地…
とかなら、まだ分かりやすいだろうけど(高田馬場m丁目と西早稲田n丁目の遠近は度外視として)
うーん
定性的な部分をどうにかしないと書けないな
「似た文字列」
何をもって「似ている」と判断するか基準不明
「できるだけ似た文字列が並ばないように」
→どの範囲で許されるのか
高田馬場1丁目1番地、2番地…
高田馬場2丁目1番地、2番地…
高田馬場3丁目1番地、2番地…
高田馬場4丁目1番地、2番地…
高田馬場5丁目1番地、2番地…
西早稲田1丁目1番地、2番地…
西早稲田2丁目1番地、2番地…
西早稲田3丁目1番地、2番地…
西早稲田4丁目1番地、2番地…
西早稲田5丁目1番地、2番地…
とかなら、まだ分かりやすいだろうけど(高田馬場m丁目と西早稲田n丁目の遠近は度外視として)
厳密には、先頭/末尾の繋ぎが未チェックという問題が残っているが…
2.のソート時に繋ぎを意識したsortにして、5.から2.へ行く前に直前要素と先頭要素を比較する処理を入れてやれば良さそうだ
2.のソート時に繋ぎを意識したsortにして、5.から2.へ行く前に直前要素と先頭要素を比較する処理を入れてやれば良さそうだ
難しく考えすぎ
期待値に達するまで適当に振り分続ければいいだけ
あとはその振り分けアルゴリズムが完全なランダムより賢ければ賢いだけコストが減る
それを十分な状態になるまで追求すればいいだけ
期待値に達するまで適当に振り分続ければいいだけ
あとはその振り分けアルゴリズムが完全なランダムより賢ければ賢いだけコストが減る
それを十分な状態になるまで追求すればいいだけ
>>173
振り分けアルゴリズムの質問にその回答はなかろうて
振り分けアルゴリズムの質問にその回答はなかろうて
「ナップサック問題」でも「全検索」は解の1つ
エレガントではないかも知れないが、不正解という評価は誤り
エレガントではないかも知れないが、不正解という評価は誤り
http://postd.cc/programmer-competency-matrix/
いきなり「レーベンシュタイン距離」と書いたとしても、他の人に理解されるとは限らん…
元質問者の場合はそうではないようだが
いきなり「レーベンシュタイン距離」と書いたとしても、他の人に理解されるとは限らん…
元質問者の場合はそうではないようだが
こういう時は発送を逆転させる
つまり良い分配アルゴリズムではなく、悪い整頓アルゴリズムを考える
それで思いつくものを現実的な妥協点として良いと思う
そういう意味ではランダムは悪くない
つまり良い分配アルゴリズムではなく、悪い整頓アルゴリズムを考える
それで思いつくものを現実的な妥協点として良いと思う
そういう意味ではランダムは悪くない
最初ランダムで走査して固まってる部分があったら適当に入れ替えてほぐす
その繰り返しはどうだろうか?
その繰り返しはどうだろうか?
>>175
> 「ナップサック問題」でも「全検索」は解の1つ
「全検索 アルゴリズム」でぐぐっても見つからないが、もしかして「全探索」といいたかったのか?
全探索は「全ての組み合わせを試す」というもので、1000個の要素なら、最大試行回数=1000*999*998*...*3*2*1回となる力業
> エレガントではないかも知れないが、不正解という評価は誤り
>>173は「失敗したらやり直す」なので「全探索」とは違う
「振り分けアルゴリズム」に欠陥があれば、永久に失敗するので無限ループとなるし、アルゴリズムの成功確率が低ければ、試行回数は全探索よりも高くなる可能性が高い
アルゴリズムに欠陥がない場合の最大試行回数は「1~∞回」で運要素の高い方法
> 「ナップサック問題」でも「全検索」は解の1つ
「全検索 アルゴリズム」でぐぐっても見つからないが、もしかして「全探索」といいたかったのか?
全探索は「全ての組み合わせを試す」というもので、1000個の要素なら、最大試行回数=1000*999*998*...*3*2*1回となる力業
> エレガントではないかも知れないが、不正解という評価は誤り
>>173は「失敗したらやり直す」なので「全探索」とは違う
「振り分けアルゴリズム」に欠陥があれば、永久に失敗するので無限ループとなるし、アルゴリズムの成功確率が低ければ、試行回数は全探索よりも高くなる可能性が高い
アルゴリズムに欠陥がない場合の最大試行回数は「1~∞回」で運要素の高い方法
>>181
1000は無いだろ
選択肢3つなんだから、たとえば1002個あったと仮定して、
同じ選択肢が決して連続しないのは大前提だろ
「できるだけ似てない文字列が隣合って並ぶように」って言ってんだから
ケチばっか付けた挙句完全に誤ったこと書いてんじゃねえよ無能
1000は無いだろ
選択肢3つなんだから、たとえば1002個あったと仮定して、
同じ選択肢が決して連続しないのは大前提だろ
「できるだけ似てない文字列が隣合って並ぶように」って言ってんだから
ケチばっか付けた挙句完全に誤ったこと書いてんじゃねえよ無能
ランダムに(または、ルールで制限しつつ)シャッフルして、
許容回数実行して、最善のものを選ぶ
最良のアルゴリズムを考えなくて良いから、
これが簡単で現実的で、そこそこ良い結果も得られる
許容回数実行して、最善のものを選ぶ
最良のアルゴリズムを考えなくて良いから、
これが簡単で現実的で、そこそこ良い結果も得られる
要約すると
「できるだけ似た文字列が並ばないように」並び替えるアルゴリズムは思いつかないので
「ランダムに」並び替えるアルゴリズムでごまかしましょう
「できるだけ似た文字列が並ばないように」並び替えるアルゴリズムは思いつかないので
「ランダムに」並び替えるアルゴリズムでごまかしましょう
重複しない整数からなる4個以上の数列がある
例 1,2,3,4
これを並び替えて、隣り合う数の差が2以上である
並びとして次のようなものが考えられる
例 3,1,4,2
この数列が大量(例1 000個)にあるとき
隣り合う数の差が2以上に並び替えるアルゴリズムを考えよ
また、隣り合う数の差の合計が最大になるアルゴリズムを考えよ
アルゴリズムは高速であればあるほどよい
参考 隣り合う数の差の合計
3,1,4,2,5 の場合 2+3+2+3=10
4,2,5,1,3 の場合 2+3+4+2=11
例 1,2,3,4
これを並び替えて、隣り合う数の差が2以上である
並びとして次のようなものが考えられる
例 3,1,4,2
この数列が大量(例1 000個)にあるとき
隣り合う数の差が2以上に並び替えるアルゴリズムを考えよ
また、隣り合う数の差の合計が最大になるアルゴリズムを考えよ
アルゴリズムは高速であればあるほどよい
参考 隣り合う数の差の合計
3,1,4,2,5 の場合 2+3+2+3=10
4,2,5,1,3 の場合 2+3+4+2=11
>>190
そこそこ結果でOKなんて誰が言ったんですか?
そこそこ結果でOKなんて誰が言ったんですか?
1文字目で分類して最も多いものから順に均等に振り分ける
その振り分け範囲内で2文字について同じように振り分けなおす
短文字ではこれを繰り返すのが最もコストが少なく並び替えられる
その振り分け範囲内で2文字について同じように振り分けなおす
短文字ではこれを繰り返すのが最もコストが少なく並び替えられる
>>194
きにすんな、別の問題として考えろ
きにすんな、別の問題として考えろ
うわ
マウンターばっかり
屁理屈こねまくって重箱の隅をつつきまくって
1行もコードも何も具体的なモノ書かずに
良く上から目線で書き込めるもんだ
マウンターばっかり
屁理屈こねまくって重箱の隅をつつきまくって
1行もコードも何も具体的なモノ書かずに
良く上から目線で書き込めるもんだ
>>153 における
> 文字列が入った配列(例として["aaa","aaa","bbb","bbb","ccc","ccc",…以下1000個ほど続くとする])
の構成要素が、具体的に ["aaa,""bbb,", "ccc" ...] 以外何があるか回答がない
釣り確定だな
> 文字列が入った配列(例として["aaa","aaa","bbb","bbb","ccc","ccc",…以下1000個ほど続くとする])
の構成要素が、具体的に ["aaa,""bbb,", "ccc" ...] 以外何があるか回答がない
釣り確定だな
前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / JavaScript スレッド一覧へ
みんなの評価 : 類似してるかもしれないスレッド
- + JavaScript の質問用スレッド vol.141 + (881) - [100%] - 2021/4/19 9:00
- + JavaScript の質問用スレッド vol.131 + (1004) - [97%] - 2018/3/7 13:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2015/1/1 18:30
- + JavaScript の質問用スレッド vol.121 + (1001) - [97%] - 2022/11/29 16:30
- + JavaScript の質問用スレッド vol.131 + (1000) - [97%] - 2017/1/25 8:01
- + JavaScript の質問用スレッド vol.142 + (984) - [97%] - 2020/8/27 19:15
- + JavaScript の質問用スレッド vol.111 + (1001) - [97%] - 2013/11/4 6:00
- + JavaScript の質問用スレッド vol.101 + (1001) - [97%] - 2012/7/16 14:15
- + JavaScript の質問用スレッド vol.144 + (288) - [97%] - 2020/5/17 20:00
- + JavaScript の質問用スレッド vol.143 + (753) - [97%] - 2020/4/19 5:00
- + JavaScript の質問用スレッド vol.140 + (1001) - [97%] - 2019/9/19 10:45
- + JavaScript の質問用スレッド vol.142 + (926) - [97%] - 2019/12/23 13:15
- + JavaScript の質問用スレッド vol.115 + (1001) - [95%] - 2014/5/29 16:16
- + JavaScript の質問用スレッド vol.123 + (966) - [95%] - 2020/10/20 2:30
- + JavaScript の質問用スレッド vol.122 + (116) - [95%] - 2018/5/2 18:30
- + JavaScript の質問用スレッド vol.122 + (1004) - [95%] - 2015/2/14 4:45
- + JavaScript の質問用スレッド vol.120 + (1002) - [95%] - 2014/11/8 1:15
トップメニューへ / →のくす牧場書庫について