CINXE.COM
CSDL | IEEE Computer Society
<!DOCTYPE html><html lang="en"><head><base href="/csdl"> <title>CSDL | IEEE Computer Society</title> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"> <link rel="icon" href="https://ieeecs-media.computer.org/wp-media/2018/04/27230619/cropped-cs-favicon-512x512-32x32.png" sizes="32x32"> <meta name="google-site-verification" content="jxkhBtaf9VsFL5u9dqfOQQCZDIoQdx1aiKlkQEUgAvk"> <link rel="dns-prefetch" href="https://csdl-downloads.ieeecomputer.org"> <link rel="dns-prefetch" href="https://kc.computer.org"> <link rel="dns-prefetch" href="https://services10.ieee.org"> <!-- Google Tag Manager --> <script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-PPQ37HW');</script> <!-- End Google Tag Manager --> <style>html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}@media print{*,*:before,*:after{background:transparent!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}}*{box-sizing:border-box}*:before,*:after{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:Helvetica Neue,Helvetica,Arial,sans-serif;font-size:14px;line-height:1.52857143;color:#515253;background-color:#f5f7fa}@-webkit-keyframes progress-bar-stripes{0%{background-position:40px 0}to{background-position:0 0}}html,body{height:100%;background-color:#fff}body{padding:0;height:100%;font-size:16px!important;font-family:Open Sans,sans-serif;color:#454545}@charset "UTF-8"</style><link rel="stylesheet" href="https://application.ieeecomputer.org/csdl-website/production/styles.8ec2919bfac702a1.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="https://application.ieeecomputer.org/csdl-website/production/styles.8ec2919bfac702a1.css"></noscript></head> <body> <csdl-app></csdl-app> <!-- Google Tag Manager (noscript) --> <noscript> <iframe src="https://www.googletagmanager.com/ns.html?id=GTM-PPQ37HW" height="0" width="0" style="display:none;visibility:hidden"></iframe> </noscript> <!-- End Google Tag Manager (noscript) --> <!-- BEGIN GOOGLE ANALYTICS --> <!-- Global site tag (gtag.js) - Google Analytics --> <script async="" src="https://www.googletagmanager.com/gtag/js?id=UA-381255-5"></script> <script> window.dataLayer = window.dataLayer || []; function gtag() { dataLayer.push(arguments); } gtag('js', new Date()); gtag('config', 'UA-381255-5', {'send_page_view': false}); </script> <script> // The following function allows an article to have click-able reference // links that will scroll to the 'References' section of the article // and highlight the appropriate reference function scrollToReference(referenceNum) { var refQuery = '#' + referenceNum; $('html, body').animate({ scrollTop: $(refQuery).offset().top, }, 1000); $('ul.referencesNotesList').children() .css('background', 'inherit'); $(refQuery).parent('li') .css('background', '#ffffd1'); } // When the user scrolls down 20px from the top of the document, show the // scroll-to-top button window.onscroll = function () { scrollFunction() }; function scrollFunction() { const scrollToTopLink = document.getElementById('scrollToTopLink'); if (scrollToTopLink) { if (document.body.scrollTop > 600 || document.documentElement.scrollTop > 600) { scrollToTopLink.style.display = 'block'; } else { scrollToTopLink.style.display = 'none'; } } } // When the user clicks on the button, scroll to the top of the document function scrollToTopOfPage() { $('html, body').animate({ scrollTop: $('html').offset().top, }, 1000); } </script> <!-- Begin ActiveCampaign script --> <script type="text/javascript"> (function (e, t, o, n, p, r, i) { e.visitorGlobalObjectAlias = n; e[e.visitorGlobalObjectAlias] = e[e.visitorGlobalObjectAlias] || function () { (e[e.visitorGlobalObjectAlias].q = e[e.visitorGlobalObjectAlias].q || []).push(arguments) }; e[e.visitorGlobalObjectAlias].l = (new Date).getTime(); r = t.createElement("script"); r.src = o; r.async = true; i = t.getElementsByTagName("script")[0]; i.parentNode.insertBefore(r, i) })(window, document, "https://diffuser-cdn.app-us1.com/diffuser/diffuser.js", "vgo"); vgo('setAccount', '224472483'); vgo('setTrackByDefault', true); vgo('process'); </script> <!-- End ActiveCampaign script --> <script type="text/x-mathjax-config"> MathJax.Hub.Config({ mml2jax: { preview: "none" }, tex2jax: { inlineMath: [ ['$_$', '$_$'], ['\\(', '\\)'], ['__$', '$__'], ['$$', '$$'], ['Z_$', '$_Z'], ] }, showProcessingMessages: false, messageStyle: "none", "fast-preview": { disabled: true }, CommonHTML: { linebreaks: { automatic: true } }, "HTML-CSS": { linebreaks: { automatic: true } }, SVG: { linebreaks: { automatic: true } }, TeX: { noErrors: { disabled: true } }, MathMenu: { styles: { ".MathJax_Menu": { "z-index": 2001 } }, delay: 600 }, extensions: [ "tex2jax.js", "TeX/AMSmath.js", "TeX/AMSsymbols.js", "TeX/ieeemacros.js", "TeX/cancel.js", "TeX/AMScd.js", "TeX/color_ieee.js", "TeX/cellcolor_ieee.js", "TeX/enclose.js", "TeX/euler_ieee.js", "TeX/upgreek.js", "TeX/ieee_stixext.js", "TeX/extpfeil.js", "TeX/mhchem.js", "TeX/ietmacros.js", "a11y/accessibility-menu.js" ], menuSettings: { zoom: "Click" } }); </script> <script type="text/javascript" src="https://application.ieeecomputer.org/assets/mathjax/2.7.4/MathJax.js?config=TeX-MML-AM_CHTML-full"></script> <!-- v ieee cookie banner v --> <script src="https://cmp.osano.com/AzyzptTmRlqVd2LRf/dc14b2c6-ae04-4497-98f0-2bdbdd2af415/osano.js"></script> <link rel="stylesheet" href="https://cookie-consent.ieee.org/ieee-cookie-banner.css" type="text/css"> <!-- ^ ieee cookie banner ^ --> <script src="https://application.ieeecomputer.org/csdl-website/production/runtime.a299147f0473bd4c.js" type="module"></script><script src="https://application.ieeecomputer.org/csdl-website/production/polyfills.74e02a65f32cdf8b.js" type="module"></script><script src="https://application.ieeecomputer.org/csdl-website/production/scripts.891354f7a8180c47.js" defer></script><script src="https://application.ieeecomputer.org/csdl-website/production/main.b206fb50cd5ad9ef.js" type="module"></script> </body></html>