Android ミュージック プレーヤー アプリにシャッフル オプションを追加したいと考えています。その目的のために、Java でランダム関数を呼び出して、0 から現在再生中の曲リストのサイズまでの数値を返します。問題は、関数が以前と同じ値を返し、値で繰り返しが発生することです。この問題を回避するために、スタック オーバーフロー自身で利用できる多くの解決策があります。私の場合、その解決策と以下は機能しません。1. シャッフル配列の作成には、0 から最大リスト サイズの値が含まれます。曲リストのサイズは動的であるため、失敗します。2. 曲リスト配列自体をシャッフルします。時間の複雑さのために失敗します。
私が必要とするのは、次のことを行う数学的なハッシュ関数です..
50 が最大範囲の場合、入力番号 1 は 34 などの他の番号にマップされます。21 などの他の番号に 2 を入力します。10 などの他の番号に 3 を入力します繰り返しは許可されません。(マッピング中は連携なし) また、その番号へのマッピングは許可されません。最大範囲が同じ (この場合は 50) で、この関数への入力数値 2 は、アプリケーション全体でいつでも値 21 を返す必要があることに注意してください。
関数時間の複雑さは少なくなるはずです。