Score:2

กำหนดสร้างอาร์เรย์ของดัชนีตามหมายเลขอินพุต

ธง in

โปรดดูส่วนอ้างอิงด้านล่างสำหรับข้อกำหนด

มีวิธีการแบบทางเดียวที่รู้จักในการสร้างอาร์เรย์ของดัชนีโดยอิงจากองค์ประกอบอินพุตสองรายการเท่านั้นหรือไม่:

  • ความยาวของอาร์เรย์ผลลัพธ์
  • ตัวเลขที่ใช้เป็นกุญแจสำคัญในการสร้างอาร์เรย์เชิงกำหนด

หากมีเพียงเมธอดที่สามารถสร้างได้เฉพาะอาร์เรย์ที่มีความยาวคงที่เท่านั้น ก็เป็นการเริ่มต้นที่ดีสำหรับฉันเช่นกัน

ตัวอย่าง:

ความยาว หมายเลขอินพุต อาร์เรย์ผลลัพธ์ของดัชนี
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]

อ้างอิง:

  • หนึ่ง อาร์เรย์ของดัชนี:
    อาร์เรย์ที่มีค่าเป็นจำนวนเต็มทั้งหมดตั้งแต่ 0 ถึง (ความยาวของอาร์เรย์ - 1) แบบไม่เรียงลำดับ
  • กำหนด การทำงาน:
    ฟังก์ชันที่ให้ผลลัพธ์เดียวกันทุกครั้งที่ป้อนข้อมูลอินพุตเดียวกัน
Score:2
ธง es

เริ่มต้นด้วยอาร์เรย์ของดัชนีที่เรียงลำดับ

เดอะ เดอร์สเทนเฟลด์ ชัฟเฟิล ทำงานโดยดำเนินการผ่านอาร์เรย์ โดยถือว่าส่วนหนึ่งของอาร์เรย์เป็นแบบสับ และส่วนที่เหลือของอาร์เรย์เป็นแบบไม่สับ เพียงแค่สลับรายการแต่ละรายการในอาร์เรย์ด้วยรายการสุ่มจากพื้นที่ที่ไม่ได้สับจนกว่าอาร์เรย์จะสับจนสมบูรณ์

การเรียงสับเปลี่ยนทั้งหมดจะเท่าเทียมกัน

CSPRNG เชิงกำหนด (ระบุด้วยหมายเลขที่คุณป้อน) จะใช้เพื่อสร้างดัชนีสุ่มที่เลือกระหว่างการสุ่ม

const csprng = new csprng(<input number seed>);
เลนส์ const = 10;
const a = อาร์เรย์ใหม่ (เลนส์);
สำหรับ (ให้ i=0; i<len; i++) a[i] = i;

สำหรับ (ให้ i=0; i<len; i++) {
  ให้ swapIndex = nextDeterministicallyRandomIntBetween(i, len, csprng);
  ให้ tmp = a[i]; ก[i] = ก[swapIndex]; a[swapIndex] = tmp; // แลกเปลี่ยน
}

ฟังก์ชัน nextDeterministicallyRandomIntBetween(lowerBoundInclusive 
    upperBoundExclusive, csprng) {

  คืนค่า lowerBoundInclusive +
    nextDeterministicallyRandomIntLowerThan(upperBoundExclusive-lowerBoundInclusive, csprng);
}

ฟังก์ชัน nextDeterministicallyRandomIntLowerThan (upperBoundExclusive, csprng) {
  // กำหนดจำนวนขั้นต่ำของบิต "b" ที่จำเป็นในการแสดง
  // (upperBoundExclusive-1). จากนั้นถาม csprng ซ้ำๆ สำหรับ b บิต
  // จนกว่าจะส่งกลับผลลัพธ์ที่ต่ำกว่า upperBoundExclusive
  ให้ b = Math.ceil(Math.log(upperBoundExclusive) / Math.log(2));
  ให้ r;
  ทำ {
    r = csprng.nextBits(ข);
  } ในขณะที่ (r>=upperBoundExclusive);
  กลับ r;
}

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา