Điểm:2

Tạo một cách xác định một mảng các chỉ mục dựa trên số đầu vào

lá cờ in

Vui lòng xem phần Tham khảo bên dưới để biết các điều khoản.

Có phương pháp một chiều đã biết để tạo ra một mảng các chỉ mục, chỉ dựa trên hai phần tử đầu vào:

  • chiều dài của mảng kết quả
  • số, được sử dụng làm khóa để tạo mảng một cách xác định

Nếu chỉ tồn tại một phương thức chỉ có thể tạo ra các mảng có độ dài cố định - thì đó cũng có thể là một khởi đầu tốt cho tôi.

Ví dụ:

Chiều dài số đầu vào Mảng kết quả của các chỉ mục
4 10001 [3, 0, 2, 1]
4 10002 [2, 3, 1, 0]
5 10001 [2, 3, 4, 1, 0]
5 10002 [4, 3, 0, 1, 2]

Thẩm quyền giải quyết:

  • một mảng chỉ số:
    Mảng, có giá trị là tất cả các số nguyên từ 0 đến (độ dài của mảng - 1), không có thứ tự.
  • xác định chức năng:
    Một chức năng, tạo ra cùng một kết quả mỗi khi cung cấp cùng một dữ liệu đầu vào
Điểm:2
lá cờ es

Bắt đầu với một mảng các chỉ số được sắp xếp.

Các Xáo trộn Durstenfeld hoạt động bằng cách tiếp tục duyệt qua mảng, coi một phần của mảng là đã xáo trộn và phần còn lại của mảng là chưa xáo trộn. Nó chỉ đơn giản hoán đổi từng mục trong mảng với một mục ngẫu nhiên từ vùng chưa xáo trộn cho đến khi mảng được xáo trộn hoàn toàn.

Tất cả các hoán vị sẽ được trang bị.

Một CSPRNG xác định (được nhập bằng số đầu vào của bạn) được sử dụng để tạo các chỉ số ngẫu nhiên được chọn trong quá trình xáo trộn.

const csprng = new csprng(<hạt giống số đầu vào>);
const len ​​= 10;
const a = Mảng mới(len);
for(let i=0; i<len; i++) a[i] = i;

for(let i=0; i<len; i++) {
  hãy hoán đổi Index = nextDeterministicallyRandomIntBetween(i, len, csprng);
  để tmp = a[i]; a[i] = a[chỉ số hoán đổi]; a[chỉ số hoán đổi] = tmp; // tráo đổi
}

hàm nextDeterministicallyRandomIntBetween(lowerBoundInclusive, 
    upperBoundExclusive, csprng) {

  trả lại LowerBoundInclusive +
    nextDeterministicallyRandomIntLowerThan(upperBoundExclusive-lowerBoundInclusive, csprng);
}

hàm nextDeterministicallyRandomIntLowerThan(upperBoundExclusive, csprng) {
  // xác định số bit "b" tối thiểu cần thiết để biểu diễn
  // (upperBoundExclusive-1). Sau đó liên tục yêu cầu csprng cho b bit
  // cho đến khi nó trả về kết quả thấp hơn upperBoundExclusive
  hãy để b = Math.ceil(Math.log(upperBoundExclusive) / Math.log(2));
  để r;
  làm {
    r = csprng.nextBits(b);
  } while (r>=upperBoundExclusive);
  trả lại r;
}

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.