1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Kỹ thuật dùng bit trạng thái để xử lý hiệu quả bài toán tin học

35 5 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Kỹ thuật dùng bit trạng thái để xử lý hiệu quả bài toán tin học
Trường học Trường Đại Học Công Nghệ Thông Tin
Chuyên ngành Tin học
Thể loại Luận văn
Định dạng
Số trang 35
Dung lượng 259 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

CÁC KIẾN THỨC CƠ BẢN VỀ BIT TRẠNG THÁI Error: Reference source not found 1.. Là giáo viên dạy tin nhiều năm tôi thấy việc trang bị cho các em học sinhcác kiến thức về thuật toán và giải

Trang 1

Kỹ thuật dùng bit trạng thái để xử lý hiệu quả bài toán Tin học

MỤC LỤC

A ĐẶT VẤN ĐỀ Error: Reference source not found

I LÝ DO CHỌN ĐỀ TÀI Error: Reference source not found

II CƠ SỞ LÝ LUẬN Error: Reference source not foundIII CƠ SỞ THỰC TIỄN Error: Reference source not found

1 Thuận lợi: Error: Reference source not found

2 Khó khăn: Error: Reference source not found

IV NỘI DUNG Error: Reference source not found

V PHẠM VI ỨNG DỤNG CỦA ĐỀ TÀI Error: Reference source not found

B NỘI DUNG Error: Reference source not found

I CÁC KIẾN THỨC CƠ BẢN VỀ BIT TRẠNG THÁI Error: Reference source not found

1 Phép đảo bit Not Error: Reference source not found

2 Phép AND Error: Reference source not found

3 Phép OR Error: Reference source not found

4 Phép phủ định NOT Error: Reference source not found

5 Phép XOR Error: Reference source not found

6 Phép dịch trái << Error: Reference source not found

7 Phép dịch phải >> Error: Reference source not found

II CÁC BÀI TOÁN MINH HỌA VỀ XỬ LÝ BIT TRẠNG THÁI Error: Reference source not found

Bài toán 1 Error: Reference source not foundBài toán 2 Error: Reference source not foundBài toán 3: Error: Reference source not foundBài toán 4: Phép cộng Error: Reference source not foundBài toán 5 Tập con Error: Reference source not foundBài toán 6: Trò chơi NIM Error: Reference source not foundBài toán 7 Số khác Error: Reference source not foundBài toán 8 Xâu cô lập Error: Reference source not foundBài toán 9 FIRSTROW Error: Reference source not found

Trang 2

Bài toán 10 Dãy số Error: Reference source not foundBài toán 11: Đầu bếp Error: Reference source not foundBài toán 12: Biểu diễn trạng thái Error: Reference source not foundBài toán 13: Quy hoạch động Error: Reference source not foundBài toán 14: Chọn ô Error: Reference source not foundBài toán 15: Chuyến du lịch - TRIP Error: Reference source not found Bài toán 16: Cô gái chăn bò - COWGIRL Error: Reference source not found

C KẾT LUẬN Error: Reference source not found

Trang 3

A ĐẶT VẤN ĐỀ

I LÝ DO CHỌN ĐỀ TÀI

Trong thời đại hiện nay công nghệ thông tin đã thực sự bùng nổ và đã có tácđộng rất lớn đến với công cuộc phát triển kinh tế - xã hội của con người, của đấtnước (và thực tế ta có thể nói rằng ta đang sống trong kỉ nguyên số, kỉ nguyêncông nghệ thông tin) Đảng và nhà nước ta đã xác định rõ là để đất nước phát triểnthì một trong những yếu tố làm nền tảng là làm sao các ứng dụng của Tin học –công nghệ thông tin phải đưa vào triệt để trong các lĩnh vực của xã hội

Những yêu cầu đẩy mạnh của các ứng dụng công nghệ thông tin, đào tạonguồn nhân lực đáp ứng yêu cầu Công nghiệp hóa, Hiện đại hóa, mở cửa và hộinhập, hướng đến nền kinh tế tri thức của đất nước ta nói riêng, thế giới nói chung

Chính vì xác định được tầm quan trọng đó, tôi nghĩ đào tạo và cung cấp chođất nước những nhà lập trình viên giỏi là việc làm hết sức cần thiết

Tin học lập trình là một môn học khó đối với học sinh THPT Làm thế nào

để học sinh hiểu, học tốt, yêu thích và tham gia tốt các kỳ thi học sinh giỏi Tin học

là điều mà nhiều giáo viên dạy tin học trăn trở

Là giáo viên dạy tin nhiều năm tôi thấy việc trang bị cho các em học sinhcác kiến thức về thuật toán và giải quyết vấn đề một cách khoa học là rất cần thiết,điều đó giúp học sinh hứng thú hơn trong học tập bởi các em tự kiến tạo tri thứchoặc tham gia vào việc kiến tạo tri thức cho mình dựa trên tri thức đã có, bổ sung

và làm cho tri thức cũ hoàn chỉnh hơn Học sinh học tập tự giác, tích cực, vừa kiếntạo tri thức, vừa học đựơc cách giải quyết vấn đề, lại vừa rèn luyện được nhữngđức tính quý báu như tính chủ động, tích cực, tính kiên trì vượt khó, tính kế hoạch

và thói quen tự kiểm tra…

Trong đề tài này, tôi xin được đề cập tới “Kỹ thuật dùng bit trạng thái để

xử lý hiệu quả bài toán tin học”.

Như chúng ta đã biết, bộ nhớ của máy tính được lưu trữ dưới dạng mã hóacủa hệ nhị phân theo bảng mã IISCI Bản chất máy tính chỉ hiểu được mã nhị phândưới dạng dãy số 0 và 1 Mỗi con số như vậy được gọi là một bit Bít là đơn vị nhỏnhất để lưu trữ dữ liệu trong máy tính điện tử, mỗi bit chứa số 0 hoặc 1 Chính vìvậy khi lập trình nếu ta chuyển bài toán về xử lý dưới dạng bit thì tốc độ củachương trình được đẩy nhanh rất nhiều

Trang 4

Ngôn ngữ lập trình cung cấp cho chúng ta những toán tử để chúng ta có thểthao tác trên bit như các phép cơ bản and, or, not, xor, dịch trái, dịch phải Trong đềtài này tôi sẽ cung cấp kiến thức về việc sử dụng các phép toán logic từ đó giúpcho việc thiết kế các biểu thức logic dùng rất nhiêu trong các phép toán điều kiệnđược nhanh chóng, chính xác, hiệu quả Hơn nữa trong đề tài này sẽ phân tích sựhiệu quả của việc chuyển bài toán từ phương pháp xử lý thông thường sangphương pháp xử lý bit.

II CƠ SỞ LÝ LUẬN

Qua nhiều năm giảng dạy, bồi dưỡng học sinh giỏi môn Tin học tôi nhậnthấy:

- Việc trang bị cho các em học sinh các kiến thức về thuật toán và giải quyếtvấn đề một cách khoa học là rất cần thiết

- Phương pháp dùng kỹ thuật bit trạng thái để xử lý thực sự hiệu quả bài toántin học

- Trong tất cả các kỳ thi chọn học sinh giỏi Tỉnh, các bài toán dùng phươngpháp bit trạng thái thực sự rất hiệu quả

III CƠ SỞ THỰC TIỄN

Một số thuận lợi và khó khăn khi thực hiện chuyên đề sáng kiến kinhnghiệm ở trường

- Học sinh rất hứng thú đối với môn học này

- Môn học có ứng dụng rất lớn trong thực tiễn nên học sinh rất chịu khónghiên cứu học tập

- Hàng năm kết quả thi học sinh giỏi môn Tin đạt kết quả cao nên tạo độnglực lớn cho học sinh quyết tâm học tập

2 Khó khăn:

Trang 5

- Các tài liệu bồi dưỡng học sinh giỏi môn tin còn rất ít.

- Giáo viên đủ chuẩn để bồi dưỡng học sinh giỏi môn tin còn hạn chế

- Là môn học khó, đòi hỏi người học hội tụ quá nhiều phẩm chất như: Thôngminh, tư duy tốt, kiên trì, có năng khiếu về lập trình, cẩn thận, nhanh nhạnh nhưngchính xác tuyệt đối trong từng kỹ thuật nhỏ

IV NỘI DUNG

- Các kiến thức cơ bản về bit trạng thái

- Các bài toán minh họa ứng dụng xử lý bit

V PHẠM VI ỨNG DỤNG CỦA ĐỀ TÀI

Nội dung của đề tài được sử dụng làm tài liệu cho các học sinh ở các trườngTHCS, THPT yêu thích môn tin học lập trình Đề tài cũng là tài liệu cho các đồngnghiệp trong và ngoài Tỉnh yêu thích bộ môn Tin học

Trang 6

B NỘI DUNG

I CÁC KIẾN THỨC CƠ BẢN VỀ BIT TRẠNG THÁI

Quy ươc về vị trí của các bit: Mỗi byte bao gồm 8 bit được mã số từ phảisang trái còn gọi là bit thấp đến bit cao Bit nằm ở bên phải được xem là thấp hơnbit nằm ở bên trái Các bit được đánh số như sau: 7 6 5 4 3 2 1 0

Mỗi bit có thể nhận 1 trong 2 giá trị là 0 hoặc 1 Tại mỗi thời điểm thực hiệnchương trình mỗi bit đươc nhận giá trị xác định Mọi số nguyên trong máy đềubiểu diễn dưới dạng nhị phân, ví dụ số 19 được biểu diễn như sau: Bit 7 6 5 4 3 2 10

1 Phép đảo bit Not

Đổi giá trị của mọi bit từ 0 thành 1 và ngược lại

Trong C phép đảo được kí hiệu là ~

Ví dụ

Các toán thử thao tác trên bit (bitwise)

Dữ liệu lưu trữ trong máy tính dưới dạng nhị phân 0 1,

ví dụ:

unsigned char a = 12;

Thì lưu trữ dưới bộ nhớ là: 0000 1100Tương tự

unsigned int b = 95;

Lưu trữ b dưới bộ nhớ là: 0000 0000 0000 0000 0000 0000 0101 1111Không gian lưu trữ kiểu unsigned int lớn hơn unsigned char do unsignedint dùng 32 bits để biểu diễn còn unsigned char dùng 8 bits để biểu diễn

Các toán tử thao tác trên bit

Trang 7

Phép thao tác trên bit Kí hiệu

Trang 8

1 1 1Phép OR chỉ có giá trị 0 nếu cả hai toán hạng đều có giá trị 0.

Trang 9

B = A >> 2 0000 0011

Các ví dụ thao tác cơ bản trên bit

AND

unsigned char a = 5; // 00000101(5)unsigned char b = 6; // 00000110(6)unsigned char c = a & b; // 00000100(4)OR

unsigned char a = 5; // 00000101(5)unsigned char b = 6; // 00000110(6)unsigned char c = a | b; // 00000111(7)NOT

Trang 10

unsigned char a = 5; // 00000101(5)unsigned char b = a >> 1; // 00000010(2)

II CÁC BÀI TOÁN MINH HỌA VỀ XỬ LÝ BIT TRẠNG THÁI

Bài toán 1: Lấy bit

Ứng dụng 1 Viết hàm getbit(x,i) cho giá trị của bit thứ i(tính từ phải sang)của số nguyên x

Trang 11

Gọi số lượng bit của x là L(x), trước hết ta phải hóa 0 các bit nằm ở bên tráibit thứ j Muốn vậy ta dịch x qua trái k= L(x)-1-j bit Sau đó ta chuyển giá trị thuđược về cấu hình ban đầu tức là dịch phải k bit rồi tiếp tục dịch phải i bit để thuđược số cần tìm Hàm sizeof(x) cho ta số byte trong x Nhân giá trị này với 8 ta sẽđược số bit trong x Vì phép nhân 8 tương đuơng với phép dịch trái 3 bit nênsizeof(x) Shl 3 cho ta số bit trong x Vì các bit được mã số từ phải sang trái bắt đầu

từ bit 0 cho nên số hiệu cao nhất trong x sẽ là sizeof(x) Shl 3 -1

char Getnum(char x, j, i)

{

char k;

k= (sizeof(x) Shl 3)-1-jreturn x Shl k Shr k Shr i;

- Viết hàm biểu diễn dưới dạng nhị phân mà không có số 0 thừa ở đầu

- Viết hàm đảo trật tự các bit trong 1 số ví dụ: 1011 (11) tahnhf 1101(13)Thủ tục Batbit(x,i) gán trị 1 cho bit thứ i trong byte x

Mô tả: Ta chuyển 1 đến vị trí i tương ứng sau đó thực hiện phép cộng logicvới byte x

Ví dụ này chỉ mang tính minh họa

char Batbit(char x, i)

{

return x OR(1 Shl i);

}

Thu tục Tatbit(x, i) gán trị 0 cho bit thứ i trong byte

Mô tả: Ta chuyển 1 đến vị trí i tương ứng, sau đó đảo byte này để được byte

có 0 ở vị trí i và 1 ở các bit còn lại, cuối cùng thực hiện phép nhân logic với byte x

Trang 12

Ví dụ này chỉ mang tính minh họa

Thao tác bit: bit 0 được coi như là false (sai); bit 1 được coi như là true(đúng) Các toán tử là '~' (NOT), '&' (AND), '|' (OR) va` '^' (XOR)

Về phép dịch bit: các toán tử là '>>' (dịch qua phải) và '<<' (dịch qua trái)(tương ứng với phép dịch cho số không dấu trong hợp ngữ; C không có toán tửdịch qua phải có dấu)

Phép nhân Ai Cập cổ đại chỉ ra cách để có thể nhân hai số nguyên tùy thích a

và b (trong đó a lớn hơn b) mà chỉ cần sử dụng thao tác dịch chuyển bit và phép cộng:

Trang 13

Một ví dụ nữa là mã giải của phép cộng, chỉ ra cách để tính tổng của hai số nguyên a và b sử dụng các toán tử thao tác bit và phép thử số 0:

Bài toán 5 Tập con

Duyệt qua tất cả các tập con có k phần tử

int s = (1 << k) - 1;

while (!(s & 1 << N))

{

//làm gì đó với sint lo = s & ~(s - 1); //bit 1 thấp nhấtint lz = (s + lo) & ~s; //bit 0 thấp nhất trên lo

s |= lz; //thêm lz vào tập hợp

s &= ~(lz - 1); //reset bit phía dưới lz

s |= (lz / lo / 2) - 1; //đặt lại đúng số bit ở cuối}

Trong C, dòng cuối có thể viết là s |= (lz >> ffs(lo)) - 1 để tránh phép chia.Xác định x ? y : -y, trong đó x bằng 0 hoặc 1 (-x ^ y) + x

Bài toán 6: Trò chơi NIM

Có n đống sỏi, mỗi đống có một số viên sỏi Hai người chơi luân phiên nhau

đi như sau Đến lượt người nào, người đó tùy chọn một đống sỏi để bốc số viên sỏi

Trang 14

trong đống đã chọn và buộc phải bốc, ít nhất là 1 viên, nhiều nhất là cả đống Aibốc được những viên sỏi cuối cùng sẽ thắng Lập chương trình tổ chức chơi giữamáy tính và người theo các yêu cầu sau:

- Số lượng sỏi lúc đầu được quy định trước

- Số lượng sỏi trong mỗi đống được sinh ngẫu nhiên

- Máy sẽ gieo xu để xác định máy hoặc người đi trước

- Có thông báo kết quả mỗi ván

Nếu thế thắng chung cuộc có tính chất T thì ai gặp phải thế đó sẽ thua, do đó

ta phải tìm mọi cách "nhường" thế có tính chất T cho đối phương.Tính chất T nói trên được gọi là bất biến của trò chơi Khi chung cuộc mọiđống sỏi đều hết cho nên S=0

Giả sử ta có n đống sỏi Gọi ai là số sỏi trong đống thứ i; i=1 n Ta lấy tổngloại trừ của các ai

S= a1 XOR a2 XOR XOR an

Ta sẽ chứng minh rằng bất biến (tính chất T) của trò chơi NIM chính là S=0

Ta sẽ sử dụng một số tính chất sau đây của phép XOR:

Tính chất 1: a XOR b =0 khi và chỉ khi a=b (suy từ định nghĩa)

Tính chất 2: a XOR b = b XOR a (tính giao hoán)

Tính chất 3: (a XOR b) XOR c = a XOR (b XOR c) (Tính kết hợp)

Tính chất 4: a XOR 0= a

Ta thừa nhận định lý sau:

Định lý: Nếu S<>0 thì tồn tại một ai thỏa mãn ai XOR S < ai

a2= 8= B1000

a3= 3= B0011

S= 2= B0010

Trang 15

Ta có a1 XOR S= 11>9 =a1

a2 XOR S= 10>8 = a2

a3 XOR S= 1< a3

Vậy a3 chính là số tìm được theo định lý trên

Nhận xét: Nếu S=0 và có ít nhất một đống sỏi với số sỏi khác 0 thì với mọicách đi ta luôn luôn có tổng loai trừ của các đống sỏi là một số khác 0

Thật vậy, không làm mất tính tổng quát ta giải sử rằng đống sỏi được chọn

để bốc là a1 Giả sử rằng sau khi bốc đống a1 ta còn lại b1 viên sỏi Có thế coi việcbốc sỏi là thay đống a1 bằng b1, vì a1 XOR a1= 0 nên tổng loài trừ thu được sau khibốc sẽ là:

P= b1 XOR (a2 XOR XOR an)

Nếu P = 0 thì b1=(a2 Xor Xor an)=0 XOR (a2 Xor Xor an)= (a1 Xor a1) Xor(a2 Xor Xor an)= = a1 Xor (a1 Xor a2 Xor Xor an)= a1 Xor S

Vì S =0 nên b1 = a1 XOR 0= a1

chơi Vậy sau khi bốc ta phải có P<>0

Hệ quả: Gọi S và P lần lượt là tổng loại trừ của các đống sỏi trước và saumột bước đi Ta có, nếu S<>0 thì có một cách đi để P= 0;

Thật vậy, theo định lý trên ta tìm được một số ai để (ai XOR S)< ai

Đặt bi = ai- (ai XOR S) Ta bốc bi viên sỏi từ đống ai, đống này sẽ còn (ai

XOR S) viên

Từ nhận xét và hệ quả nói trên ta suy ra S=0 chính là bất biến của trò chơiNIM

Nước đi của đối thủ thông minh khi đó sẽ bao gồm hai bước sau:

Bước 1: Tính S= a1 XOR a2 XOR a3 XOR an

Bước 2: Nếu S <> 0: thực hiện các bước sau:

Bước 2a Duyệt các đống sỏi để tìm đống ai thỏa điều kiện (ai XOR S)< ai

Bước 2b Bốc ai - (ai XOR S) viên từ đống ai tìm được Số sỏi còn lại củađống này sẽ là (ai XOR S)

Trang 16

Nếu S=0: chọn đống lớn để bốc 1 viên cốt làm cho đối phương khó pháthiện nguy cơ thua của ta.

Như vậy thủ tục NIM - Trò chơi NIM với m đống sỏi gồm các bước sauBước 1: Kiểm tra giá trị hợp lệ của m

Bước 2: Khởi trị;

Bước 2a Sinh ngẫu nhiên các giá trị ai>=1, i=1 n

Bước 2b Gieo xu để xác định ai đi trước, người hay máy

Bước 3 Chơi theo sơ đồ sau

Bước 4: Thông báo kết quả thắng- thua giữa người và máy

Trong đó thủ tục Maydi được triển khai theo sơ đồ đối thủ thông minh trìnhbày ở trên

Trò chơi này nhìn chung đơn giản, dễ dàng cài đặt, nếu có thêm chút đồ họavào là quá ngon lành Chúc các bạn thấy vui vẻ với trò chơi này

Bài toán 7 Số khác

Xét một dãy gồm N số nguyên A1, A2, A3,…,AN-1, AN Dãy có tính chất sau:Tất cả các số đều xuất hiện một số chẵn lần

Có duy nhất một số x xuất hiện đúng một lần gọi là số khác.

Yêu cầu: Hãy tìm số khác của một dãy cho trước.

Dữ liệu vào: Trong file văn bản SK.INP gồm:

Dòng đầu là số N (N≤107)

N dòng tiếp theo, dòng thứ i là số Ai có giá trị tuyệt đối không quá 109

Ví dụ:

SK.INP SK.OUT

Trang 17

}cout<<kq;

}

Phép toán xor là phép toán triệt tiêu bit: 2 bit giống nhau cho giá trị 0; 2 bítkhác nhau cho giá trị 1

Ta xét dãy n=5 số: 1, 3, 7, 3, 1

Trang 18

Lần 1: m=0 (tức là 00 trong hệ nhị phân); x= 1( = 01 trong hệ nhị phân)

Bài toán 8 Xâu cô lập

Cho trước N (N≤10000) xâu kí tự độ dài không quá 255 kí tự Xâu cô lậpđược định nghĩa là xâu chỉ xuất hiện duy nhất 1 lần trong N xâu đã cho Các xâucòn lại luôn xuất hiện một số chẵn lần

Yêu cầu: Tìm xâu cô lập từ N xâu đã cho Với dữ liệu vào là hoàn toàn đúng

đắn

Dữ liệu vào: Trong file văn bản SINGLE.INP gồm N dòng biểu diễn N xâu

đã cho ban đầu

Kết quả ra: Ra file văn bản SINGLE.OUT xâu cô lập

Ví dụ:

Ngày đăng: 21/05/2021, 22:13

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w