- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 JavaScript 从给定的球员列表中计算出羽毛球 double 比赛的所有组合。每个玩家都与其他人组队。
EG。如果我有以下球员a、b、c、d。它们的组合可以是:
a & b V c & d
a 和 c V b 和 d
a 和 d V b 和 c
我正在使用下面的代码,我编写它来完成这项工作,但效率有点低。它循环遍历 PLAYERS 数组 4 次,查找每一个组合(包括不可能的组合)。然后,它按字母顺序对游戏进行排序,并将其存储在 GAMES 数组中(如果尚不存在)。然后我可以使用 GAMES 数组的前半部分列出所有游戏组合。
问题是,如果我有超过 8 个玩家,它的运行速度就会非常慢,因为组合增长呈指数级增长。
有人知道我可以使用更好的方法或算法吗?越想脑子越痛!
var PLAYERS = ["a", "b", "c", "d", "e", "f", "g"];
var GAMES = [];
var p1, p2, p3, p4, i1, i2, i3, i4, entry, found, i;
var pos = 0;
var TEAM1 = [];
var TEAM2 = [];
// loop through players 4 times to get all combinations
for (i1 = 0; i1 < PLAYERS.length; i1++)
{
p1 = PLAYERS[i1];
for (i2 = 0; i2 < PLAYERS.length; i2++)
{
p2 = PLAYERS[i2];
for (i3 = 0; i3 < PLAYERS.length; i3++)
{
p3 = PLAYERS[i3];
for (i4 = 0; i4 < PLAYERS.length; i4++)
{
p4 = PLAYERS[i4];
if ((p1 != p2 && p1 != p3 && p1 != p4) &&
(p2 != p1 && p2 != p3 && p2 != p4) &&
(p3 != p1 && p3 != p2 && p3 != p4) &&
(p4 != p1 && p4 != p2 && p4 != p3))
{
// sort teams into alphabetical order (so we can compare them easily later)
TEAM1[0] = p1;
TEAM1[1] = p2;
TEAM2[0] = p3;
TEAM2[1] = p4;
TEAM1.sort();
TEAM2.sort();
// work out the game and search the array to see if it already exists
entry = TEAM1[0] + " & " + TEAM1[1] + " v " + TEAM2[0] + " & " + TEAM2[1];
found = false;
for (i=0; i < GAMES.length; i++)
{
if (entry == GAMES[i]) found = true;
}
// if the game is unique then store it
if (!found)
{
GAMES[pos] = entry;
document.write((pos+1) + ": " + GAMES[pos] + "
");
pos++;
}
}
}
}
}
}
Cảm ơn trước.
杰森。
1 Câu trả lời
好吧,经过一番深思熟虑,我想出了这个(见下文)。它仍然不是很出色,但速度要快得多。
首先,我发现我不需要在第一个 FOR 循环中转到 Players 数组的末尾,因为这些排列已经计算出来了。其次,我增加了第二个 FOR 循环中的起始值,同样是因为这些排列已经计算出来。然后我在第三个和第四个 FOR 循环中做了类似的事情。
如果我可以避免长时间的 IF 比较,那么我可以加快速度!我还添加了名称而不是字符来演示我想要实现的目标。
欢迎有更多想法。
var PLAYERS = ["eric", "bob", "jim", "john", "dave", "steve", "fred"];
var GAMES = [];
var p1, p2, p3, p4, i1, i2, i3, i4, entry, found, i;
var pos = 0;
var TEAM1 = [];
var TEAM2 = [];
// loop through players 4 times to get all combinations
for (i1 = 0; i1 < (PLAYERS.length - 1); i1++)
{
p1 = PLAYERS[i1];
for (i2 = 1; i2 < PLAYERS.length; i2++)
{
p2 = PLAYERS[i2];
for (i3 = 1; i3 < (PLAYERS.length - 1); i3++)
{
p3 = PLAYERS[i3];
for (i4 = 2; i4 < PLAYERS.length; i4++)
{
p4 = PLAYERS[i4];
if ((p1 != p2 && p1 != p3 && p1 != p4) &&
(p2 != p1 && p2 != p3 && p2 != p4) &&
(p3 != p1 && p3 != p2 && p3 != p4) &&
(p4 != p1 && p4 != p2 && p4 != p3))
{
// sort teams into alphabetical order (so we can compare them easily later)
TEAM1[0] = p1;
TEAM1[1] = p2;
TEAM2[0] = p3;
TEAM2[1] = p4;
TEAM1.sort();
TEAM2.sort();
// work out the game and search the array to see if it already exists
entry = TEAM1[0] + " & " + TEAM1[1] + " v " + TEAM2[0] + " & " + TEAM2[1];
found = false;
for (i=0; i < GAMES.length; i++)
{
if (entry == GAMES[i]) found = true;
}
// if the game is unique then store it
if (!found)
{
GAMES[pos] = entry;
document.write((pos+1) + ": " + GAMES[pos] + "
");
pos++;
}
}
}
}
}
}
干杯,杰森。
关于JavaScript 优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19426747/
Tôi có một biểu mẫu ở định dạng html: Tôi cần JavaScript thực thi trên trường nhập giá trị, nhưng chỉ thông qua việc gửi biểu mẫu. Lý do là trang là một mẫu nên tôi không kiểm soát được nó (không thể có
Diễn đàn tôi quản lý được lưu trữ bằng phần mềm nên tôi không có quyền truy cập vào mã nguồn và tôi chỉ có thể thêm JavaScript vào trang để đạt được mục đích. Tôi đang cố gắng thay thế trường hợp đầu tiên của một số từ khóa văn bản nhất định trên tất cả các trang bằng siêu liên kết. Tôi cũng sắp xếp chúng theo mã quốc gia
Tôi đang sử dụng JS để mở một trang mới và viết mã HTML vào đó, nhưng khi tôi thử viết JS vào trang mới bằng document.write() thì hàm này không hoạt động. Rõ ràng là một khi đã nhìn thấy thì JS chính sẽ đóng lại. Cho buổi khai trương sắp tới
Đặt câu hỏi không phải để giải quyết vấn đề, đặt câu hỏi là để hiểu rõ hơn về các chuyên gia hệ thống! Tôi biết rằng bất cứ khi nào bạn nhập mã javascript vào công cụ javascript, nó sẽ được công cụ javascript thực thi ngay lập tức. Vì tôi chưa thấy Engi
Tôi có hai tập tin javascript trong một thư mục. Tôi muốn truyền một biến từ tệp javascript này sang tệp javascript khác. Tôi nên sử dụng chương trình nào? Câu trả lời hay nhất window.postMessage dùng để nhắn tin giữa các tài liệu. làm
Tôi có một bài tập trong đó tôi cần lấy hai đầu vào và kiểm tra xem cả hai có bằng một hay không. Nếu đó là console.log thông thường console.log false Tôi đã thử một cái gì đó như thế này: hàm isPositive(fir
Tôi đang làm việc trên một ứng dụng web trong đó tôi dự định cho phép các trang web khác (khách hàng) nhúng mã javascript sau vào trang của họ: Ứng dụng web của tôi nằm tại http://example.org. Tôi không thể cho rằng các trang web của khách hàng có JQue
Hiện tại tôi đang sử dụng ba tệp JS bên ngoài. Tôi muốn kết hợp cả ba tệp JS thành một. Hãy làm bất cứ điều gì cần thiết. Tôi đã tạo aio.js và trong aio.js src="https://code.jquery.com/
Ví dụ, tôi có một mảng như thế này: var myArray = []; var item1 = { start: '08:00', end: '09:30' } var item2 = {
Vì vậy, tôi đang tạo một tiện ích mở rộng cho Chrome sử dụng một số tập lệnh TamperMonkey mà tôi đã tạo. Tôi muốn có một tệp javascript "chính" mà bạn có thể đưa vào và thực thi các tập lệnh khác từ đó. Tôi giỏi sử dụng dòng sau để đưa java khác
Tôi có các tệp A, B html và A, B javascript. Và làm thế nào để di chuyển các biến toàn cục được sử dụng trong JavaScript A trực tiếp sang JavaScript B? Ví dụ JavaScript) va
Tôi cần đưa toàn bộ mã sau vào một tệp JavaScript có tên là activate.js. Bạn có thể cho tôi biết cách thực hiện được không? var int = new int({ giây: 30, đánh dấu
Tôi đã tạo một trang chủ EXAMPLE1.Master cho ứng dụng web .net của mình. Tôi lưu trữ giá trị của chúng trong một biến JavaScript. Tôi muốn lấy biến đó trong một tệp JS khác. Ví dụ 1. Master:-
Có thư viện nào tôi có thể sử dụng để chuyển đổi mã như thế này: function () { var a = 1; } thành mã như thế này: function () { var a = 1; } trong trình duyệt của tôi không? Bởi vì tôi đang ở Gi
Tôi nhận được lỗi cú pháp bị thiếu $(document).ready(function changeText() { var p = document.getElementById('bidp
Tôi đang tạo thanh tiến trình. Nó có nhãn. Tôi muốn điều chỉnh nhãn của một đoạn mã hoàn thành cụ thể. Sau khi tìm ra một số câu trả lời cho các giải pháp khả thi, tôi đã đưa ra đoạn mã sau. Cái đầu tiên khởi động và hoạt động như mong đợi. Tuy nhiên, câu thứ hai thì không. Có vấn đề gì với nó vậy? Mã như sau: HTML:
Đây là một câu hỏi thực sự đơn giản mà đầu óc đơn giản của tôi không thể trả lời được: Tại sao các hàm ẩn danh và onload sau đây không chạy khi tôi tải thư viện bên ngoài? Tôi đang bỏ lỡ một điều rất cơ bản. Library.js chỉ có một dòng: console.log(
Tôi biết JavaScript là ngôn ngữ phía máy khách nhưng tôi muốn thử tìm hiểu xem mã JavaScript được nhúng trong mã thực tế có khác biệt gì so với mã chạy trên bảng điều khiển không. Hãy để tôi giải thích bằng một ví dụ: Tôi muốn tạo một
Làm thế nào tôi có thể thay đổi javascript nội tuyến này thành Unobtrusive JavaScript? Cảm ơn! Tôi rất cảm kích câu trả lời của bạn, nhưng nó không hiệu quả. Mã của tôi là: Tệp PHP js document.getElem
Tôi đang tìm cách thanh lịch nhất để "đổ" một đối tượng JavaScript đơn giản vào mã nguồn JavaScript được tạo động. Mục đích: Giả sử chúng ta có máy chủ node.js tạo HTML. Chúng ta có một đối tượng x ở phía máy chủ.
Tôi là một lập trình viên xuất sắc, rất giỏi!